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

图片转 ANSI 字符画

把图片采样为 2×2 像素块,用 Unicode 四象限字符和 24-bit 前景/背景色近似显示。每格仍只有两种颜色,不是四种独立颜色,也不代表四倍无损分辨率。

转换模块不上传图片。解码、缩放和选色在浏览器中进行,预览和下载链接属于当前标签页。站点仍可能加载广告、记录访问日志或发出其他请求;浏览器内转换不等于整页离线。

图片转 Truecolor Unicode 四象限 ANSI

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

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

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

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


        

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

终端字符格设置一个前景色和一个背景色。16 个遮罩使用空格、U+2580/2584/2588/258C/2590 和 U+2596–259F,表示哪些象限由前景覆盖。

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

如果四个采样点包含三种以上不同颜色,两色表示通常无法让误差归零;但选对遮罩仍可以降低误差。锐利双色边缘可能无损表示,复杂纹理则未必。正文的四像素实验给出了可核对的例子。

输出怎么用

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

  • 确认实际终端的 24-bit 颜色支持。不支持时如何处理取决于终端和配置,当前工具不自动生成 256 色版本;只设置 COLORTERM 并不能增加显示能力。
  • 字体要包含四象限块字符。缺字形时会显示成方框或空白。大部分等宽编程字体都有,但部分精简字体没有。
  • 行宽要够。输出的字符宽度是固定的,终端窗口窄于它就会折行,整张图会错位。转换前先按目标终端宽度设置输出宽度。

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

参数与验证边界

列宽影响采样量;字符格高宽比影响形状,背景色影响透明区域合成。先按实际终端列宽和字体比例设置,别把 ANSI 文本直接贴进不解析 SGR 的 README 或聊天窗口当作图片。网页最多输出 260 行、62000 格,超出时实际尺寸会降低。

相邻格子只有在前景/背景色改变时才重发颜色序列,每行另有重置。宽度翻倍在未触及上限且比例固定时约增加四倍格子,但不保证字节数精确翻四倍。预览不能替代目标终端的实际显示检查。

相关文章

向下探索