如果我有纯文本文件,如何通过命令行将其转换为图像文件?(并保留其中的ASCII艺术作品的布局)
cat做一个截图呢?
clear && cat file。但是,是的,这很丑。
如果我有纯文本文件,如何通过命令行将其转换为图像文件?(并保留其中的ASCII艺术作品的布局)
cat做一个截图呢?
clear && cat file。但是,是的,这很丑。
Answers:
您可以使用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艺术文件在哪里:-
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艺术的一部分,因为这会引起混乱。
您选择的字体应该是等宽字体,否则文本将无法对齐。
这将产生:-

-list选项,您可以从任何ImageMagick命令(包括convert)获取当前可用字体的列表。因此,例如,convert -list font它将向您显示的所有可能参数-font。
sudo yum install ImageMagick。
sudo dnf install ImageMagick,在大多数其他流行的Linux发行版中,它将是一些sudo apt-get install ...命令。无论如何,以上信息确实假定ImageMagick已安装在相关系统上。
我发现ImageMagick的-annotate运算符比-drawgarethTheRed建议的方法要方便一些,原因很简单,因为它不需要修改输入文件。它不如强大-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不可用(或者根本不需要),则to 的参数可以是任何受支持的字体名称。可以使用-list运算符获取任何ImageMagick命令可用的字体列表,因此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在处理过程中消耗了更多的CPU和内存。)
如果您的文本文件尚未按照渲染所需的格式进行格式化(例如,如果使用的行很长),则可能需要重新格式化后再将其提交给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中的内容,在默认操作模式下,它将通过自动换行将其输入重新格式化为75列的宽度。(除非存在长度超过75个字符的连续长字符串(如URL),否则它们会扩展。)fmt
一旦fmt已经格式化文本,它会被传递给convert将然后渲染管道fmt输出,如同其直接读取文件。(指定的文件名-是UNIX外壳程序的相当普遍的缩写,用于“从标准输入中读取,而不是任何命名的磁盘文件中读取”,ImageMagick的工具遵循该约定。)
annotate参数的y分量 应大于点数,以确保所有内容均出现:所需大小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 ...的指挥工作的形式,通过任何机会,如果是这样,你可以只更换?fmt用cat,并得到相同的结果@ascii.txt版本。)
convert 成功,当你使用@ garethTheRed的-draw形式,并插入定位指令到ascii.txt文件?在我看来,如果真是如此,那将是非常奇怪的事情,因为在处理导入的文本文件的内容时,我很难想象这种安全隐患也不会-annotate适用-draw。
/etc/ImageMagick-6/policy.xml内容包含<policy domain="path" rights="none" pattern="@*"/>在内,所以我猜就是那样的。stdin也不起作用,大概是因为它也包含@-模式。对于绝望的人,"$(cat ascii.txt)"如果它不占用CLI的长度,则可以使用。