#ascii-art #convert-images #image #gif #font #character #alphabet

bin+lib image-to-ascii

将图像和GIF转换为ASCII艺术

10个版本 (5个破坏性更新)

0.6.0 2024年7月8日
0.5.1 2024年7月6日
0.4.6 2024年6月20日
0.4.1 2024年3月16日
0.1.1 2022年5月31日

#538 in 文本处理

MIT 许可证

42KB
851

ascii-image

将图像和GIF转换为ASCII艺术。

mount-fuji

mandelbrot

saint-vincent

安装

从源代码安装

您需要安装 Rust 才能从源代码安装此程序。安装Rust后,安装步骤简单

cargo install image-to-ascii

预编译的二进制文件

您可以从GitHub上的发布部分下载相应的预编译二进制文件。目前,二进制文件为最新的Ubuntu、Windows和MacOS版本构建。

用法

以下是一些在不同输入和输出格式之间转换的示例

image-to-ascii input_image.jpg
image-to-ascii input_image.gif -o output_image.gif
image-to-ascii input_image.jpeg -o output_image.png --width 200
image-to-ascii input_image.gif -o output_image.gif --metric dot --font bitocra-13 --alphabet minimal
image-to-ascii input_image.gif -o output_image.json --metric grad --font fonts/courier.bdf --alphabet alphabets/letters.txt --conversion-algorithm base

输入

应支持所有由 image 可读的图像格式作为输入,并会自动从输入文件名检测。动画.gif文件也可以用作输入;如果输出格式是.gif或.json,输出也将是动画的。已测试与.gif、.png、.jpg、.bmp、.svg和.json文件格式兼容。

输出

应支持所有由 image 可写的图像格式作为输出,并会自动从输出文件名检测。如果输出格式是.json且输入格式是动画gif,您可以通过打开viewer.html来预览动画结果。如果没有提供输出文件,输出将直接在终端中显示;请注意,大多数终端都不是为跟上此程序输出文本的速度而设计的,因此终端输出可能会相当断断续续。

字体

此程序与点阵字体.bdf格式一起工作。如果您想使用除默认字体以外的字体,您可以在此处找到大量免费点阵字体。

参数

<IMAGE_PATH>

输入图像文件的路径。如果输入文件是图像,输出将是静态图像。如果输入是.gif,则输出将是动画。已测试与.gif、.png、.jpg、.bmp、.svg和.json文件格式兼容。

-a, --alphabet [默认: alphabet]

指定要使用的字母表的名称或路径。提供的字体必须为提供的字母表中的每个字符提供符号。有效的字母表名称包括

-b, --brightness-offset <BRIGHTNESS_OFFSET> [默认: 0, 最小: 0, 最大: 255]

从图像的每个灰度像素中减去的量,在计算字符相似度之前。在大多数情况下,亮度偏移量为0通常是合适的。对于使用某些度量标准(点、杰卡德、遮挡和清晰)的黑白输出,较亮图像通常在高亮度偏移量下看起来更好。

-f, --font <FONT> [默认: bitocra-13]

指定要使用的字体名称或路径。提供的字体必须是.bdf格式的等宽字体,并且必须为提供的字母表中的每个字符提供一个符号。有效的字体名称是

--fps [默认: 30]

用于gif或终端输出的帧率。对于gif输出,最大fps为30。

-h, --help 打印帮助信息

-m, --metric [默认: direction-and-intensity]

用于确定哪个字符最适合图像特定片段的度量的度量。有效值是

  • intensity:片段的亮度与字符位图亮度的接近程度
  • intensity的同义词
  • direction:片段像素的方向与字符位图总体方向相似程度
  • direction-and-intensity:片段的方向和强度与字符位图值相似程度
  • grad:direction-and-intensity的同义词
  • dot:片段像素值和字符位图值之间的点积
  • jaccard:片段像素值和字符位图值之间的加权杰卡德指数
  • occlusion:片段被字符位图“遮挡”的程度,或反之
  • clear:字体从片段中清除的程度

--no-color

使输出为黑白。适用于不支持彩色输出的环境,例如某些终端、某些编辑器或文本环境等。

--conversion-algorithm <CONVERSION_ALGORITHM> [默认: edge-augmented]

用于将像素转换为字符的算法。有效值是

  • base:仅使用提供的度量标准转换像素
  • edge:执行边缘检测,然后使用方向度量标准转换检测到的图像边缘
  • edge-augmented:将原始图像与边缘检测层结合,然后对增强图像应用提供的度量标准
  • two-pass:使用方向度量标准转换检测到的图像边缘,然后使用提供的度量标准转换任何非边缘像素

-o, --out-path <OUT_PATH>

写入输出的路径。如果没有提供值,输出将在控制台显示。已测试可与.gif、.png、.jpg、.bmp、.svg和.json文件格式一起使用。任何gif查看器都可以显示.gif输出,并且可以使用viewer.html显示.json gif输出。

-w, --width [默认: 图像宽度以字符为单位]

最终输出的字符宽度。将尽可能保持宽高比,同时使输出宽度和高度为字体宽度和高度的倍数。如果没有提供值,将使用图像宽度以字符为单位,并向上取整到下一个整数。

依赖关系

~10–23MB
~240K SLoC