🎨 选择一张图片

🖼️
点击选择,或把图片拖到这里
支持 JPG / PNG / WebP,单张建议 ≤ 20MB
列

推荐 60~160:小了看不出轮廓,大了在手机上要横向拖很久。主体简单、轮廓清晰的图效果最好。

级数越多过渡越细腻,级数越少对比越硬朗。

默认是「越暗的地方用越密的字符」。要把字符画贴到深色背景上,勾上反色更清楚。

🎨

选张图,设个宽度,看它变成一屏字符。

📊 字符集对照与效果说明

同一张图,换一套字符集就是完全不同的气质。

字符集字符(由浅到深)灰阶级数适合什么图
标准 .:-=+*#%@10 级照片、人像、风景——过渡细腻,默认首选
简单 .:*#@6 级Logo、剪影、文字图——对比强烈,轮廓更硬
块状 ░▒▓█4 级像素风、几何图形——像马赛克,复古感强
反色(勾选后)深浅对调同上贴到深色背景 / 黑夜模式文档里
.:-=+*#%@标准 · 10 级
.:*#@简单 · 6 级
░▒▓█块状 · 4 级

🧠 什么样的图转出来最好看

字符画不是万能的,选对图就已经成功了一半。

图片特征效果建议
轮廓清晰、主体大很好,一眼能认出人像特写、剪影、Logo 首选
明暗对比强很好,层次分明黑白照片、逆光剪影效果最佳
背景杂乱较差,主体被淹没先裁剪或抠图,只留主体
细节丰富的大场景一般,会糊成一团把输出宽度调到 150 以上
纯文字截图很差,基本不可读不适合做字符画,直接贴图更好

⚠️ 免责声明:生成结果为基于像素灰度的字符映射,属于「示意性还原」,不是对原图的精确复刻。
效果受图片对比度、主体复杂度、输出宽度、字体等宽性影响:必须粘贴到等宽字体(Consolas、Courier New、Menlo 等)环境中,否则字符画会错位变形。
导出 PNG 使用 14px 等宽字体、白底黑字渲染,不同系统字体度量可能略有差异。
所有处理均在你的浏览器本地完成,图片不会上传到任何服务器。

🎨

图片转字符画

图片处理 完全免费 🌙 支持黑夜模式 🔒 纯前端,图片不上传 📋 可复制文本 🖼️ 可导出 PNG

把一张照片变成一屏由字符拼出来的画,这事看着玄乎,原理其实简单得离谱:
用字符的「视觉密度」去代替像素的「明暗」。
具体分三步:
① 缩小采样:把图片画到一个很小的 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 这类等宽字体环境里才是正的;换成宋体、微软雅黑,字宽不一致,整张画当场散架。
整个转换过程都在你自己的浏览器里跑,图片不会上传到任何服务器。

类别图片处理
灰度公式0.299R + 0.587G + 0.114B
输出宽度20 ~ 300 列(推荐 60~160)
运行方式纯前端本地,不上传

核心特性

宽度可调 20~300
三套字符集
一键反色
宽高比补偿 ×0.5
复制文本
下载 TXT
导出 PNG
本地不上传

关于这个工具

怎么转:
① 把图片绘制到 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 三种导出。
它不做:不智能抠图、不增强对比度、不识别内容。结果需在等宽字体环境下查看,否则会错位。

怎么用

  1. 第 1 步
    选一张轮廓清晰、明暗分明的图片(人像特写、剪影最佳)。
  2. 第 2 步
    设输出宽度,默认 100 列,想要更细腻就往上加。
  3. 第 3 步
    挑字符集,需要贴深色背景就勾「反色」。
  4. 第 4 步
    点「🎨 生成字符画」,下方立刻出结果。
  5. 第 5 步
    复制文本、下载 TXT,或导出 PNG 直接当图片发。
  6. 第 6 步
    粘贴时务必用等宽字体(Consolas / Courier New / Menlo)。

更新记录

  • v1.0 2026-09-20 工具正式上线:支持将图片按灰度映射转为字符画,可调输出宽度 20~300 列、切换标准 / 简单 / 块状三套字符集、一键反色,内置 ×0.5 宽高比补偿避免纵向拉伸;结果可复制文本、下载 TXT、导出 PNG。附字符集对照表与选图建议表。全程浏览器本地处理,图片不上传,适配黑夜模式。

常见问题

为什么我粘贴出来是乱的、对不齐?
九成是字体不是等宽字体。
字符画完全依赖「每个字符占一样宽」这个前提,一旦换成宋体、微软雅黑、或者微信聊天框里的默认字体,字宽不一致,整张画立刻散架。
解决办法:
· 粘贴到 代码编辑器(VS Code、记事本设置 Consolas)、Markdown 代码块、或 Terminal 里;
· 字体选 Consolas / Courier New / Menlo / JetBrains Mono;
· 想发到朋友圈、微信群,就点「🖼️ 导出 PNG」,把它变成一张真正的图片,到哪都不会变形。
输出宽度填多少合适?
默认 100 列,是个比较均衡的值。按用途调:
· 60~80:字符很少,轮廓粗犷,适合当签名档、弹幕;
· 100~120:最常用,细腻度和可读性平衡得最好;
· 150~200:细节丰富,适合看大图,但手机上要横向拖很久;
· 200 以上:接近原图细节,但基本只能在电脑上横屏看。
判断标准很简单:把结果缩到能一屏看完,还能一眼认出主体,就是合适的宽度。
另外注意,宽度越大字符总数按平方增长(100 列约 1 万字符,200 列约 4 万字符),复制到一些有长度限制的地方会被截断。
为什么我的图转出来一片糊涂不出是什么?
通常是三个原因:
① 背景太杂乱:字符画没有「主次」概念,背景的每一处细节都会变成字符,主体就被淹没了。建议先裁剪或抠图,只留主体;
② 明暗对比不够:整张图灰蒙蒙的,所有像素灰度都挤在中间一段,映射出来就全是 - = + 这几个中间字符。选逆光、剪影、黑白照片效果好得多;
③ 细节太多、主体太小:一张满是人的合影,每个头只有几个字符,当然认不出来。
实在不行就试试块状字符集(░▒▓█),4 级灰阶对比最硬,轮廓反而清楚。
那个「× 0.5」是什么?为什么算行数要乘它?
这是字符宽高比补偿。
等宽字体的每个字符,高度大约是宽度的 2 倍。如果按原图比例直接「一个像素一行」来采样,那每个像素会被一个「又高又窄」的字符代替,整张画就被纵向拉长了一倍——人脸变马脸。
所以算行数时要乘以 0.5:
行数 = 列数 × (原图高 / 原图宽) × 0.5
乘完以后,字符画看起来才和原图比例一致。
你换成不同字体、不同行高,这个系数理论上要微调,但 0.5 对绝大多数等宽字体都够用。
我的照片会被上传吗?
不会。选图、缩放、取灰度、生成字符、导出全部在你自己的浏览器里完成,照片不会上传到任何服务器,刷新页面数据即清除。

💬 留言板 0

全部留言需审核通过后展示
💬

还没有留言,来抢沙发吧!

✍️ 说点什么
0 / 500
图形验证码