推荐 60~160:小了看不出轮廓,大了在手机上要横向拖很久。主体简单、轮廓清晰的图效果最好。
级数越多过渡越细腻,级数越少对比越硬朗。
默认是「越暗的地方用越密的字符」。要把字符画贴到深色背景上,勾上反色更清楚。
选张图,设个宽度,看它变成一屏字符。
同一张图,换一套字符集就是完全不同的气质。
| 字符集 | 字符(由浅到深) | 灰阶级数 | 适合什么图 |
|---|---|---|---|
| 标准 | .:-=+*#%@ | 10 级 | 照片、人像、风景——过渡细腻,默认首选 |
| 简单 | .:*#@ | 6 级 | Logo、剪影、文字图——对比强烈,轮廓更硬 |
| 块状 | ░▒▓█ | 4 级 | 像素风、几何图形——像马赛克,复古感强 |
| 反色(勾选后) | 深浅对调 | 同上 | 贴到深色背景 / 黑夜模式文档里 |
字符画不是万能的,选对图就已经成功了一半。
| 图片特征 | 效果 | 建议 |
|---|---|---|
| 轮廓清晰、主体大 | 很好,一眼能认出 | 人像特写、剪影、Logo 首选 |
| 明暗对比强 | 很好,层次分明 | 黑白照片、逆光剪影效果最佳 |
| 背景杂乱 | 较差,主体被淹没 | 先裁剪或抠图,只留主体 |
| 细节丰富的大场景 | 一般,会糊成一团 | 把输出宽度调到 150 以上 |
| 纯文字截图 | 很差,基本不可读 | 不适合做字符画,直接贴图更好 |
⚠️ 免责声明:生成结果为基于像素灰度的字符映射,属于「示意性还原」,不是对原图的精确复刻。
效果受图片对比度、主体复杂度、输出宽度、字体等宽性影响:必须粘贴到等宽字体(Consolas、Courier New、Menlo 等)环境中,否则字符画会错位变形。
导出 PNG 使用 14px 等宽字体、白底黑字渲染,不同系统字体度量可能略有差异。
所有处理均在你的浏览器本地完成,图片不会上传到任何服务器。
把一张照片变成一屏由字符拼出来的画,这事看着玄乎,原理其实简单得离谱:
用字符的「视觉密度」去代替像素的「明暗」。
具体分三步:
① 缩小采样:把图片画到一个很小的 canvas 上,宽就是你要的字符列数(默认 100 列)。这一步等于「一个字符 = 一个像素块」,图片瞬间从几百万像素压缩成一万来个点;
② 算灰度:对每个点用经典公式 灰度 = 0.299 × R + 0.587 × G + 0.114 × B 算出一个 0~255 的明暗值。这个公式不是随手写的,人眼对绿色最敏感、对蓝色最不敏感,所以绿色权重最高(0.587)、蓝色最低(0.114);
③ 映射字符:把明暗值映射到字符集上。 .:-=+*#%@ 这串字符是按「视觉密度从小到大」排好的——空格最轻、@ 最重。画面越暗的地方,就用越密的字符,于是明暗就被翻译成了字符的疏密。
这里有个很容易被忽略的细节:字符不是正方形。
等宽字体的字符大约是「高比宽 ≈ 2 : 1」,如果按原图比例一行一个像素地采样,转出来的画会被纵向拉长一倍,人脸变成马脸。
所以工具在算行数时乘了一个 0.5 的补偿系数——这就是那个神秘的「× 0.5」。
选图才是决定成败的关键。什么样的图转出来好看?
· 轮廓清晰、主体够大:人像特写、动物剪影、Logo,一眼就能认出来;
· 明暗对比强烈:黑白照片、逆光剪影,层次分明;
· 背景干净:杂乱的背景会变成一片噪点,把主体淹掉。
反过来,纯文字截图、细节爆炸的大场景转出来基本是一团糊,别为难它。
三套字符集怎么选:
· 标准 .:-=+*#%@(10 级):过渡细腻,照片首选;
· 简单 .:*#@(6 级):对比硬朗,适合 Logo、剪影;
· 块状 ░▒▓█(4 级):像素风,自带复古感。
还有个「反色」开关:默认是越暗越密,如果你要把字符画贴到深色背景或黑夜模式的文档里,勾上反色立刻清楚。
生成完能做三件事:复制文本(贴到代码注释、README、聊天框里当彩蛋)、下载 TXT、导出 PNG(把字符画渲染成一张真正的图片发出去)。
最后一个重要提醒:一定要用等宽字体看。粘贴到 Consolas、Courier New、Menlo 这类等宽字体环境里才是正的;换成宋体、微软雅黑,字宽不一致,整张画当场散架。
整个转换过程都在你自己的浏览器里跑,图片不会上传到任何服务器。
怎么转:
① 把图片绘制到 cols × rows 的小 canvas 上,其中 rows = round(cols × 原高/原宽 × 0.5),0.5 用于补偿等宽字符「高≈2×宽」的比例;
② getImageData 逐点取 RGB,按 0.299R + 0.587G + 0.114B 算灰度(0~255);
③ 归一化 t = 灰度/255,默认取 1 − t(越暗 → 越密的字符),勾选反色则直接用 t;
④ idx = round(t × (字符集长度 − 1)) 取字符,逐行拼接成多行字符串;
⑤ 用等宽字体 <pre> 展示(横向可滚动),并提供复制 / TXT / PNG 三种导出。
它不做:不智能抠图、不增强对比度、不识别内容。结果需在等宽字体环境下查看,否则会错位。
- = + 这几个中间字符。选逆光、剪影、黑白照片效果好得多;░▒▓█),4 级灰阶对比最硬,轮廓反而清楚。行数 = 列数 × (原图高 / 原图宽) × 0.5审核通过后就会展示在留言板上,稍安勿躁~
还没有留言,来抢沙发吧!