把一张图片转成能直接贴进终端的彩色字符画。用的是 Unicode 四象限块字符加 24 位真彩色转义序列,所以每个字符格能表达 2×2 共四个像素,分辨率是普通字符画的四倍。
图片不会上传。解码、缩放、取色、匹配全部在你自己的浏览器里完成,服务器只发出去一份静态页面,之后不再参与。生成的预览和下载链接只存在于当前标签页,刷新即失效。
图片转 Truecolor Unicode 四象限 ANSI
拖入图片后,浏览器会把它缩放到终端网格,在每个字符格内用四象限 Unicode 字符和 24-bit ANSI 前景/背景色保存尽可能多的细节。
文件只在本机浏览器中处理,不上传到服务器;生成的下载链接和预览会在 30 分钟后自动失效。
下载后可在支持 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。宽度翻倍,输出字节数大致翻四倍——每个字符都带着自己的颜色转义序列,开销不小。
相关文章
- 图片转 Unicode 四象限 ANSI 的原理与实现:完整推导遮罩搜索、误差度量和真彩色转义序列的构造,附可离线运行的实现。
- 实用功能:站点内其他浏览器端工具。
- 下载页:配套的离线脚本和示例素材。
