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

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

Если у меня есть простой текстовый файл, как мне преобразовать его в файл изображения через командную строку? (и сохранить в нем макет ASCII-арта)

решение1

imagemagickздесь твой друг. Что-то вроде следующего может помочь тебе:-

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:::::::::' 
        `':::_:' -- '' -'-' `':_::::'`  
    "

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

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

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

введите описание изображения здесь

решение2

Я нахожу оператор 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" для включения в него text 15x15части примитива -draw.

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

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

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

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

Необходимость угадывать необходимые размеры выходного изображения также может быть утомительной. Обычно я просто выбираю избыточные значения, а затем использую ImageMagick -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небольшое увеличение загрузки ЦП и памяти при обработке.)

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

Если ваш текстовый файл еще не отформатирован так, как вам нужно для его отображения (например, если он использует очень длинные строки), то вам, возможно, придется переформатировать его перед передачей в 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.txtDejaVu Sans Condensed размером 24 пункта,послеон был обработан командой fmt, которая в своем режиме работы по умолчанию переформатирует свой ввод путем переноса слов до ширины 75 столбцов. (Если только нет длинных непрерывных строк длиной более 75 символов, таких как URL-адреса, в этом случае они будут расширены.)

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

решение3

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

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

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

решение4

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

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

Вы можете создатьSVG-файлыслишком!

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

pango-viewимеет множество настроек и опций макета, см. страницу руководства.

Связанный контент