Если у меня есть простой текстовый файл, как я могу преобразовать его в файл изображения через командную строку? (и сохранить макет ASCII-искусства в нем)
catне сделать снимок экрана?
clear && cat file. Но да, это безобразно.
Если у меня есть простой текстовый файл, как я могу преобразовать его в файл изображения через командную строку? (и сохранить макет ASCII-искусства в нем)
catне сделать снимок экрана?
clear && cat file. Но да, это безобразно.
Ответы:
Вы можете использовать openoffice (libreoffice), чтобы сделать это.
soffice --convert-to jpg "Textfile.doc"
он работает и с текстовыми файлами.
--helpвыходных данных.) Только морщина, если текст длиннее страницы, похоже, вы получаете только первую страницу. (Если есть способ заставить его выводить другие страницы или несколько файлов, для меня это не сразу очевидно. Передача --outdirне имеет значения.) Но для коротких фрагментов текста он работает ОЧЕНЬ хорошо, и даже автоматически переносится. Ницца!
soffice --convert-to jpg ascii.txt && mogrify -trim -bordercolor "#FFF" -border 10 +repage ascii.jpg
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, так как это может сбить с толку.
Выбранный шрифт должен быть моноширинным, иначе текст не будет выравниваться.
Это производит: -

-listопцию. Так, например convert -list font, покажет вам все возможные аргументы -font.
sudo yum install ImageMagick.
sudo dnf install ImageMagick, а на большинстве других популярных дистрибутивов Linux это будет какая-то sudo apt-get install ...команда. Несмотря на это, приведенная выше информация действительно предполагает, что ImageMagick установлен в рассматриваемой системе.
Я считаю, что -annotateоператор ImageMagick более удобен, чем -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) должно быть, по крайней мере, равно размеру точки выбранного шрифта (аргумент to -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.txt24-точечного DejaVu Sans Condensed после его обработки fmtкомандой, которая в режиме работы по умолчанию переформатирует свой ввод путем переноса слов на ширину 75 столбцов. (Если нет длинных непрерывных строк длиной более 75 символов, таких как URL, в этом случае они будут расширены.)
После того fmt, как текст будет переформатирован, он будет передан в convertнего, а затем отобразит fmtвывод по конвейеру , как если бы он читал файл напрямую. (Указание имени файла -является довольно распространенным сокращением оболочки UNIX для «чтения из стандартного ввода вместо любого именованного файла на диске», и инструменты ImageMagick следуют этому соглашению.)
annotateаргумента должен быть больше, чем размер точки, чтобы быть уверенным, что все появляется: convert -size 1000x2000 xc:white -font "FreeMono" -pointsize 123 -fill black \ -annotate +0+123 "@ascii.txt" -trim -bordercolor "#FFF" -border 10 +repage image.pngгде 123находится желаемый размер. Кроме того, вы можете использовать, convert -list fontчтобы узнать, какие шрифты поддерживаются ( "FreeMono"не поддерживается повсеместно).
convert -list fontправильный синтаксис, а не convert -list fonts.
/etc/ImageMagick-7/policy.txtкоторые мешали бы любой из этих форм конвертации. Знаете ли вы, какая политика блокирует конвертацию и почему она установлена? (Кроме того, цепляясь за соломинку: работает ли fmt ...по какой-либо fmtcat@ascii.txt
convert успешно, когда вы используете -drawформу @ garethTheRed и вставляете команды позиционирования в ascii.txtфайл? Мне кажется, было бы довольно странно, если бы это было так, поскольку у меня возникли проблемы с представлением, какие проблемы безопасности могут возникнуть -annotate, если это не относится к -drawработе при работе с содержимым импортированного текстового файла.
/etc/ImageMagick-6/policy.xmlсодержит, <policy domain="path" rights="none" pattern="@*"/>так что я предполагаю, что это тот. stdin также не работает, предположительно потому, что в нем также есть @-шаблон. Для отчаявшихся, "$(cat ascii.txt)"работает, если не взорвать длину CLI.