如何将文本文件转换为图片

如何将文本文件转换为图片

如果我有一个纯文本文件,如何通过命令行将其转换为图像文件? (并保留其中 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运算符比 garethTheRed 建议的方法更方便-draw,原因很简单,它不需要修改输入文件。它不像 那样强大-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在处理时消耗稍多的 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.txt这将渲染24 点 DejaVu Sans Condensed的内容,它已由该fmt命令处理,该命令在默认操作模式下将通过自动换行将其输入重新格式化为 75 列的宽度。 (除非有超过 75 个字符的长连续字符串,例如 URL,在这种情况下它们会扩展。)

一旦fmt重新格式化文本,它将被传递到convert渲染管道fmt输出,就像直接读取文件一样。 (指定文件名-是相当常见的 UNIX shell 简写,表示“从标准输入读取,而不是任何命名的磁盘文件”,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有许多自定义和布局选项,请参阅其手册页。

相关内容