是否有一个命令行程序可以将图像转换为ASCII艺术图像?


19

是否有一个命令行程序(对于Linux)可以将图像转换为ascii art,然后将该输出保存为图像,例如jpg或png?

为了说明我的需要,我想将下面的图像转换为ASCII艺术 在此处输入图片说明

我希望从程序中获得的输出应与此类似,该输出是通过截取图像到ascii转换器的输出的屏幕快照而创建的(输出为纯文本)

在此处输入图片说明

我知道GIMP可以将图像保存为ascii艺术,并且aview也可以将图像转换为ascii。但是,前者不能通过命令行来完成,而后者只能让您查看输出,而不是保存输出(我不想求助于截取输出的屏幕截图)。

我也知道libcaca可以将其输出保存到图像中,但仅输出彩色ascii,如下所示。

在此处输入图片说明

通过将源图像转换为灰度,然后使用以下命令进行:

img2txt -W 70 -f tga input.jpg > output.tga

需要命令行程序的原因是要批处理一个装满图像的文件夹。


1
我从未尝试过,但我确实知道可以将文本传递给convert(ImageMagick)。如果将img2txt的输出-f设置为ansi(而不是彩色的ansi),则可以通过管道传输结果进行转换(或其他合适的软件)
horatio

@horatio:convert似乎期望输入文件,并拒绝从管道读取。无论如何,我们可以通过一个临时文件来实现。
塔卡特

Answers:


7

您可以使用我创建的以下python代码从静止图像和视频创建ascii艺术:

https://gist.github.com/lindylex/9374326

输出示例

原版的 在此处输入图片说明

ASCII艺术作品输出(python ascii_movie_image_ver_1.py cat.jpg 4 10在此处输入图片说明


2
链接来去去去,即使它是您自己的网站,也可以使用您的代码添加“ before”和“ after”两个屏幕截图吗?
伊兰2014年

4
@Ilan我添加了一个示例,并指向一个公共git存储库
hellocatfood 2014年

14

如果您似乎正在运行Linux,则可以轻松地将应用程序拼接在一起以获得所需的结果。然后,也可以将其合并到批处理脚本中。

下面的示例使用了jp2a,这是一个功能强大的JPG到ASCII艺术转换器,具有许多选项,可以实现所需的结果(请参阅手册)。然后,我们再处理由此产生的ASCII文本文件中使用的图像转换ImageMagick的套件。同样,有许多选项可以微调结果。这两个应用程序可能都可以从您的发行版本的存储库中获得。

下面的示例脚本将从.jpg输入的JPEG图像生成ASCII艺术图像(格式取决于我们给的扩展名,是JPEG)。源在6点处呈现为160个字符的宽度。然后,这将恰好适合从convert预先定义的默认页面大小。

#! /bin/bash
#Usage ./j2asc infile.jpg outfile.jpg

echo "converting $1 to $2"
jp2a --width=160 -i  $1 --output=tmp.txt
convert -font Courier -pointsize 6 tmp.txt $2

这可能是最接近所需输出的位置。谢谢!
hellocatfood

有没有办法将宽度指定为其他值835px呢?我想将ascii艺术作品转换为1920x1080墙纸图像,但是当我通过该-resize 1920x1080选项时,宽度仍为835px

@awashburn:图像大小由字符数(宽度)和点大小确定。放大点数以获取更大的输出,或在第二轮中缩放生成的图像。
塔卡特2014年

1
对于Mac用户:jp2a,也可通过自制软件和运行可用:brew install jp2a
k0pernikus 2014年

1
在某些情况下,还应考虑直接输出到html :jp2a --html --width=160 --chars="\'\"love" input.jpg --output=output.htm。您可以为渲染指定首选的字符集(如果要使用它们,必须转义元字符)。对于jp2a也看到AUR拱门

2

在Node.js Knockout 2012中,有一个获奖作品,它使用了网络摄像头视频提要,并吐出了“ ascii提要”:

字形图

时序图页面

Asciigram是一个“生产力工具”,可让您使用网络摄像头创建ASCII视频和图像。您也可以创建ASCII图像,将图像拖到页面上。[链接]

它不完全是命令行,但是也许您可以根据需要对其进行改造。他们用来将图像转换为ascii的库称为Jscii


1
它仅输出文本,而不输出图像。另外,它不是命令行程序
hellocatfood


1

您似乎正在使用Linux,并且已经知道libcaca。还有另一个lib可以完全满足您的要求(在命令行上为Ascii提供图像):Aalib

有很多程序可以做到这一点。这一个在Linux和Windows上都可以使用。不使用外部库,可用的完整源代码等。


据我所知,Aalib无法将其输出直接保存到图像中-需要使用一些涉及屏幕截图的方法,这对于大图像而言并不可靠。如果有一种使用Aalib的方法,您可以更新答案吗?您提到的程序看起来非常不错。它可以进行批量转换吗?是否有命令行界面?
hellocatfood 2014年

1

只要我知道该程序没有命令行界面,而是将图像转换为文本,然后转换为图像。源代码可用,因此您可以使用它来编写自己的工具。

没错,aalib不会输出图像,但是会输出文本。以及在命令行上运行的许多其他程序。

如果您使用的是Linux,则有一个名为asciitopgm的命令行程序,它将ascii文本转换为位图。它是netpbm软件包的一部分。

因此,您可以使用多种工具:

  1. aalib使用文本绘制图像
  2. asciitopgm使用文本文件创建pgm位图。
  3. (可选)使用convert(来自Imagemagick程序包)将pgm转换为所需的任何其他栅格格式。

我认为您可以按照这种方式做您想做的事。


0

是的,有一个工具jp2a可以将jpg图像基本上转换为ascii艺术。

例如:

$ jp2a skull.jpg

原始Skull.jpg

在此处输入图片说明

输出ASCII艺术

在此处输入图片说明

确保使用jpg图片。如果您的图片采用其他格式,则可以通过以下方式进行更改

$ convert skull.png skull.jpg

1
您好,欢迎来到GDSE!这似乎是重复的答案。您可以通过编辑对其进行改进,否则最终可能会被删除。
好奇
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.