图片转字符画在线生成
上传一张图,浏览器直接把它转成 ASCII 字符艺术。黑白、彩色、方块字符都行,密度和对比度可调,输出可复制文本或导出 PNG。图片不上传服务器,纯 Canvas 本地运算,无广告无水印。
点击选择 或拖拽 / 粘贴一张图片
JPG · PNG · WebP · GIF 首帧 | 人像/logo/剪影效果最好
常见问题
为什么密度拉太大反而看不清?
屏幕物理像素有限,浏览器渲染一个 300 列 × 200 行 = 6 万个字符时,每个字符只有几像素宽,肉眼分辨不清反而糊成一片。建议先按 120~160 列生成看整体效果,需要发到大屏或印刷时再调高到 240~300。手机竖屏预览建议压到 80~100 列。
怎么让人像更像人像?
三步:①先裁剪再转,用图片裁剪只留脸部区域,占比越大细节越多;②提高对比度到 1.3~1.5,让五官从背景里跳出来;③字符集选 standard 或 ascii,别用 dense(70 级细节太密反而模糊面部轮廓)。深色背景配浅色字(默认配色)比反过来更接近传统 ASCII 艺术的观感。
彩色模式生成的字符画能复制到微信/Discord 吗?
彩色靠 <span style="color:..."> 上色,只有支持富文本的编辑器(Notion、飞书文档、部分邮件客户端)能保留颜色。微信、Discord、Telegram、GitHub markdown 都会丢色,粘过去就是普通黑白字。彩色场景建议直接下载 PNG 或截图分享。想在纯文本环境保留视觉冲击力就用黑白 + binary/blocks 字符集。
为什么下载的 PNG 比预览的清晰?
预览用的是网页 <pre> 元素,字体渲染受浏览器缩放和抗锯齿限制;导出 PNG 是把每个字符重新画到 Canvas,尺寸和抗锯齿都由代码控制,1× 就是标准分辨率,字符边缘清爽。想要更大的 PNG 目前可以先调高密度(列数)再导出。
图片会上传服务器吗?
不会。缩放取样、亮度计算、字符映射、彩色着色、Canvas 出图,全部跑在你浏览器里,图片和文本都不离开设备。断网也能用。
图片转字符画的原理和用得好的几个小窍门
ASCII art 出现的比互联网还早。1960 年代终端只能输出等宽字符,人们用叠字符的方式画海报、签名档、BBS 猫娘。1990 年代 Usenet 讨论组每天都有人贴用 # 拼的辛普森。到了今天字符画不再是必需的表达方式,但它仍然是最便宜的视觉玩梗——粘贴到 GitHub README、聊天群公告、代码注释里,纯文本能过任何审查、任何字号,还能显式表明「这是我做的,不是随手一张图」。
本质就是「亮度 → 字符」的映射
把一张彩色图片转成字符画只有三步。第一步下采样:把原图缩到目标字符列数×行数的分辨率。第二步算亮度:读每个像素的 RGB,按感知公式 0.299R + 0.587G + 0.114B 算出灰度值(这个权重来自 Rec. 601 电视信号标准,人眼对绿色最敏感,对蓝色最不敏感,所以绿色权重占了 60%)。第三步映射字符:字符集按「视觉密度」从稀到密排列,如 ' .:-=+*#%@';把 0~1 的亮度映射到字符集下标,暗像素配 @,亮像素配空格。就这么简单。
但一个细节坑住 90% 的新手:等宽字符不是正方形。它宽高比大约 1:2(高比宽多一倍)。如果你直接把 100 行 × 100 列的字符网格对着 100×100 像素的图片采样,最终字符画在等宽字体下看起来会被纵向拉长一倍——像哈哈镜。本工具会自动把行数按 height / width × cols × 0.5 换算,让结果保持视觉正比例。这也是为什么你调「密度」滑块调的是列数不是像素数,行数会跟着自动算。
字符集怎么选:以视觉密度排序才对
字符集的关键不是「字符长得像什么」,而是每个字符点亮的像素比例——填充度。空格填充度 0%,句号约 5%,等号约 15%,井号约 35%,@ 约 60%。把它们从低到高排好就是一套字符集。市面上流传的经典 70 级字符集来自 Paul Bourke 的实测:他把每个 ASCII 字符渲染出来算真实黑白像素比,排序结果就是 " .`'^\",:;Il!i><~+_-?][}{1)(|/tfjrxnuvczXYUJCLQ0OZmwqpdbkhao*#MW&8%B@$"。这个字符集叫 dense,是本工具内置的一个选项。
但更长不一定更好。字符集越长,相邻字符的填充度差异越小,人眼分辨不出来;短字符集(10~15 级)对比更强、观感更接近传统 ASCII 艺术。经验值:
| 字符集 | 级数 | 擅长 | 不擅长 |
|---|---|---|---|
| binary | 2 | 剪影、logo、二值图 | 照片(细节全丢) |
| blocks(░▒▓█) | 5 | 像素艺术、复古风、粗糙人像 | 细腻风景 |
| ascii(10 级) | 10 | 大部分照片、人像、字符最经典 | — |
| standard(15 级) | 15 | 层次感更丰富,风景照首选 | — |
| dense(70 级) | 70 | 大图、印刷、纹理细节 | 小尺寸预览(糊) |
对比度是隐藏的救命参数
直接转出来的字符画常见问题是「一片灰」——原图光照平淡时,亮度值挤在 0.4~0.6 之间,能用上的字符只占字符集中间几个,两头的极亮和极暗字符都没用到。解法就是拉对比度:把 0.5 当中心,值 < 0.5 的更暗,> 0.5 的更亮,人为把亮度分布拉开。本工具的对比度滑块公式是 lum' = (lum - 0.5) × k + 0.5,k=1 无变化,k=1.5 明显加强,k=2 极端反差(适合做黑白剪影)。
另一个技巧是反相。默认深色背景配浅色字(暗像素→@,亮像素→空),如果你要打印到白纸或粘到 markdown 里显示,反过来会更好读:浅色背景 + 深色字,勾上「反相」开关即可。
彩色字符画的取舍
彩色模式给每个字符加上原图对应像素的 RGB 色。观感很棒,但有两个代价:一是文件体积膨胀——每个字符要包一个 span 标签,2 万字符的彩色 HTML 大约 500KB;二是可移植性差,粘到微信、GitHub、terminal 里全部丢色。所以工具默认关闭彩色,需要时再打开,主要用于导出 PNG 或直接截图分享。
如果只想要「彩色感」但保留纯文本可复制性,一个折中办法是导出 PNG——本工具的下载 PNG 会把彩色字符逐个用 Canvas 绘制,你得到一张真正的图,粘到任何地方都是彩色的,代价是不再是「文本」。
什么场景用字符画最有效
三种场景性价比最高。README banner:把项目 logo 转成字符画放在 README 顶端,几行代码即成视觉锚点,用等宽字体永远显示正确,不像图片会被 GitHub 的深色模式坑。命令行工具启动画面:CLI 里放一张 ASCII logo 是行业惯例(figlet、cowsay 时代传下来),本工具能给你一份现成素材而不用自己开 Photoshop。玩梗:把老板/同事/宠物的头像转成字符画贴到工作群,比表情包稀有一个数量级——因为大部分人不知道这东西一分钟就能生成。
做完字符画还想继续折腾?可以接着用 截图美化 给导出的 PNG 加渐变背景 + 圆角阴影发朋友圈,或者用 圆角图片 把字符 PNG 做成头像。整站所有工具都本地跑,图片不出你电脑。