浩天博客
图片转 ANSI 字符画
站内搜索
直接问 AI

图片转 ANSI 字符画

把一张图片转成能直接贴进终端的彩色字符画。用的是 Unicode 四象限块字符加 24 位真彩色转义序列,所以每个字符格能表达 2×2 共四个像素,分辨率是普通字符画的四倍。

图片不会上传。解码、缩放、取色、匹配全部在你自己的浏览器里完成,服务器只发出去一份静态页面,之后不再参与。生成的预览和下载链接只存在于当前标签页,刷新即失效。

图片转 Truecolor Unicode 四象限 ANSI

拖入图片后,浏览器会把它缩放到终端网格,在每个字符格内用四象限 Unicode 字符和 24-bit ANSI 前景/背景色保存尽可能多的细节。

文件只在本机浏览器中处理,不上传到服务器;生成的下载链接和预览会在 30 分钟后自动失效。

阅读实现原理
下载 .ans
等待图片输入

下载后可在支持 Truecolor 的终端运行:cat 文件名.ans


        

为什么每个字符只能用两种颜色

终端的一个字符格只能设置一个前景色和一个背景色。四象限块字符(U+2596 到 U+259F 这一组,加上空格和实心块)通过”哪几个象限被前景色填充”来编码形状——16 种组合对应 16 种遮罩。

于是转换的核心不是配色,而是在 16 种遮罩里挑一种,使得”被前景覆盖的像素取同一个色、其余取另一个色”之后总误差最小。工具会对每个 2×2 块把 16 种遮罩全试一遍,各自算出最优的前景/背景色和残差,取残差最小的那个。

这也解释了它最典型的失败情况:一个 2×2 块里如果有三种以上差异明显的颜色,无论选哪种遮罩都压不下误差,输出就会出现明显的色块断层。渐变平缓的图片效果最好,高频细节和细线条最容易糊。

输出怎么用

输出是带 ANSI 转义序列的纯文本。直接 cat 到终端即可显示,但有几个前提:

  • 终端要支持 24 位真彩色。iTerm2、Windows Terminal、现代 GNOME Terminal 都支持;老式 xterm 或某些 SSH 客户端只有 256 色,颜色会被就近映射,观感差很多。
  • 字体要包含四象限块字符。缺字形时会显示成方框或空白。大部分等宽编程字体都有,但部分精简字体没有。
  • 行宽要够。输出的字符宽度是固定的,终端窗口窄于它就会折行,整张图会错位。转换前先按目标终端宽度设置输出宽度。

如果贴进不支持转义序列的地方(比如大多数网页文本框、Word),你会看到一堆 ESC[38;2;...m 这样的乱码——那不是生成错了,是接收方不解析 ANSI。

参数怎么调

宽度是唯一真正需要调的参数,它同时决定了分辨率和文件体积。经验上:贴进 README 或聊天窗口用 60–80 字符,全屏展示用 100–160。宽度翻倍,输出字节数大致翻四倍——每个字符都带着自己的颜色转义序列,开销不小。

相关文章

向下探索