Как преобразовать текстовый файл в изображение

Как Chris упомянул, это - разделитель, однако для проверки длины строки, Вы сделали бы следующее:

if [ -z "$REPLY" -o "$REPLY" == "y" ]; then
    echo "It was acknowledged"
else
    echo "Not acknowledged"
    exit 1
fi
17
23.06.2014, 22:03
4 ответа

Для этого можно использовать openoffice (libreoffice).

soffice --convert-to jpg "Textfile.doc"

работает и с текстовыми файлами.

9
27.01.2020, 19:46

imagemagagick твой друг здесь. Вам может помочь нечто подобное:-

convert -size 360x360 xc:white -font "FreeMono" -pointsize 12 -fill black -draw @ascii.txt image.png

где ascii.txt - ваш файл ascii-art:-

text 15,15 "                 .88888888:. 
                88888888.88888. 
              .8888888888888888. 
              888888888888888888 
              88' _`88'_  `88888 
              88 88 88 88  88888 
              88_88_::_88_:88888 
              88:::,::,:::::8888 
              88`:::::::::'`8888 
             .88  `::::'    8:88. 
            8888            `8:888. 
          .8888'             `888888. 
          .8888:..  .::.  ...:'8888888:. 
        .8888.'     :'     `'::`88:88888 
       .8888        '         `.888:8888. 
      888:8         .           888:88888 
    .888:88        .:           888:88888: 
    8888888.       ::           88:888888 
    `.::.888.      ::          .88888888 
   .::::::.888.    ::         :::`8888'.:. 
  ::::::::::.888   '         .:::::::::::: 
  ::::::::::::.8    '      .:8::::::::::::. 
 .::::::::::::::.        .:888::::::::::::: 
 :::::::::::::::88:.__..:88888:::::::::::' 
  `'.:::::::::::88888888888.88:::::::::' 
        `':::_:' -- '' -'-' `':_::::'`  
    "

с текстом 15,15 добавленным в качестве первой строки текста (15,15 - это смещение позиции). Также убедитесь, что конвертируемый текст заключен в кавычки. Одиночные или двойные кавычки подойдут, но убедитесь, что они не используются как часть вашего ascii-art, так как это приведет к путанице.

Выбранный вами шрифт должен быть моноспицевым, иначе текст не выровняется.

Это приводит к:-

enter image description here

26
27.01.2020, 19:46

Я считаю, что оператор ImageMagick -annotate немного удобнее, чем метод -draw , предложенный garethTheRed, по той простой причине, что он не требует модификации входного файла. . Он не такой мощный, как -draw , но для полного выгрузки содержимого текстового файла в изображение он отлично подходит.

convert -size 360x360 xc:white -font "FreeMono" -pointsize 12 -fill black \
-annotate +15+15 "@ascii.txt" image.png

выведет визуализированную версию содержимого данного файла, но без необходимости изменять ваш файл «ascii.txt», чтобы он содержал текст 15x15 часть примитива -draw .

Указание аргументов

Аргументом для -font может быть любое имя поддерживаемого шрифта, если FreeMono недоступен (или просто нежелателен). Список шрифтов, доступных для любой команды ImageMagick, можно получить с помощью оператора -list , поэтому convert -list font отобразит все возможные аргументы для -font .

Аргументы -annotate (насколько далеко сдвинуть отображаемый текст от края холста) состоят из горизонтального и вертикального смещения пикселей (соответственно). Первое смещение (горизонтальный сдвиг по оси x) может быть любым положительным целым числом, но не должно превышать нескольких пикселей. Второе смещение (вертикальный сдвиг по оси Y) должно быть как минимум равным размеру точки выбранного шрифта (аргумент -pointsize ), потому что ImageMagick поместит базовую линию шрифта с заданным смещением.Поэтому, если вы не сместите шрифт вниз хотя бы на точек пикселей, верх первой строки будет обрезан.

Я рекомендую перейти по крайней мере на несколько пикселей, поэтому, если вы используете -pointsize 64 , вы должны объединить это с чем-то вроде -annotate + 15 + 80 . (Нет причин увеличивать горизонтальное смещение при увеличении размера шрифта, это не имеет отношения к размерам текста.)

Угадывать необходимые размеры выходного изображения также может быть утомительно. Обычно я просто выбираю чрезмерные значения, а затем использую ImageMagick's -trim и -border , чтобы автоматически обрезать результат. Следующая команда:

convert -size 1000x2000 xc:white -font "FreeMono" -pointsize 12 -fill black \
-annotate +15+15 "@ascii.txt" -trim -bordercolor "#FFF" -border 10 +repage image.png

выполнит рендеринг в поле размером 1000x2000, а затем обрежет лишнее пустое пространство, за исключением 10-пиксельной границы по всему тексту. + repage в самом конце предотвращает создание выходного PNG со смещением изображения, в противном случае GIMP вызывал бы всплывающее диалоговое окно при загрузке с вопросом, следует ли применить смещение.

(Очевидно, что 1000x2000 слишком много для небольших текстовых файлов, а для более длинных, возможно, потребуется увеличить по крайней мере вертикальный размер. Однако проще переоценить, поскольку единственная стоимость - преобразование , немного потребляющее больше ЦП и памяти во время обработки.)

Предварительная обработка ввода

Если ваш текстовый файл еще не отформатирован так, как вам нужно для его рендеринга (скажем, если в нем используются очень длинные строки), вам, возможно, придется переформатировать перед передачей в convert .ImageMagick не оборачивает текст, поэтому каждая строка текста будет увеличиваться на всю длину по горизонтали. К счастью, можно запустить файл через любые программы форматирования командной строки, которые вы захотите, а затем передать обработанный текст в convert вместо чтения непосредственно из файла:

fmt < ascii.txt | convert -size 1000x2000 xc:white -font "DejaVu-Sans-Condensed" \
-pointsize 24 -fill black -annotate +15+30 "@-" -trim -bordercolor "#FFF" \
-border 10 +repage image.png

Это отобразит содержимое ascii.txt в 24-точечном DejaVu Sans Condensed, после он был обработан командой fmt , которая в своем режиме работы по умолчанию переформатирует ввод на перенос слов до 75 столбцов. (Если нет длинных непрерывных строк длиной более 75 символов, таких как URL-адреса, в этом случае они будут расширяться.)

После того, как fmt переформатирует текст, он будет передан на convert , который затем отобразит вывод fmt в конвейер, как если бы он читал файл напрямую. (Указание имени файла - является довольно распространенным сокращением оболочки UNIX для «чтения из стандартного ввода вместо любого именованного файла на диске», и инструменты ImageMagick следуют этому соглашению.)

18
27.01.2020, 19:46

Простое решение — использовать pango-view, предоставленную Pango , библиотеку рендеринга текста, используемую в GTK, которую вы, вероятно, уже установили:

pango-view --font=mono -qo image.png file

Вы также можете создавать SVG !

pango-view --font=mono -qo image.svg file

pango-viewимеет множество вариантов настройки и компоновки, обратитесь к его справочной странице.

3
19.07.2020, 07:40

Теги

Похожие вопросы