Если у меня есть простой текстовый файл, как мне преобразовать его в файл изображения через командную строку? (и сохранить в нем макет 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.txt
DejaVu 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
имеет множество настроек и опций макета, см. страницу руководства.