ASCII 艺术字生成器

把一小段英文按 5 行、每字 3 列的点阵字形拼成字符画;四种风格共用同一张字形表,切换风格只是把描边字符从井号换成另外一组。

—
#    ###  # #  ###  # #   #   ## 
#     #   # #  # #  # #  # #  # #
#     #   # #  # #  # #  ###  # #
#     #   # #  ##   # #  # #  # #
###  ###  ###   #   ###  # #  # #

默认示例 LIUQUAN 的 block 风格输出固定为 5 行、最长行 33 字符、合计 165 字符;换风格后行数与宽度完全不变,变的只有那 165 个字符里的描边符号。

使用方法

  1. 输入框内容与结果区字符画都是服务端直出的示例 LIUQUAN:即使脚本没跑起来或被浏览器拦下,页面也已把 5 行字符画放在这里,输入框不会是空白。
  2. 「输出风格」下拉选 block、shade、star 或 dot。四种风格共用同一张 5 行 × 3 列字形表,切换只在渲染最后一步换掉描边字符:block 井号、shade 艾特符、star 星号、dot 实心圆点与中间点。
  3. 「宽文本处理」默认横向滚动,结果区保留原始列宽并给出滚动条。改成自动折行后按容器宽度换行,适合窄屏截图,但挤到下一行的尾部会让肉眼误判成字形错位。
  4. 在输入框里直接按回车即触发渲染,不必点按钮;改动风格或宽文本处理方式也会立刻重画,输入过程中不需要等待。
  5. 结果区上方四个卡片给出输出行数、最长行字符数、总字符数与未收录字符个数。遇到字形表之外的字符时,下方会列出未收录清单。
  6. 「复制字符画」把 5 行文本原样放进剪贴板(含行尾空格),「复制对照表」复制逐字符列宽表,制表符分隔,可直接粘进表格软件。

这个ASCII艺术字生成器能解决什么问题

本页解决的是「把一小段短英文变成能直接贴进纯文本环境、比原字号大好几倍的字」。这类环境只能显示字符、不能插图:README 顶部标题、程序启动横幅、代码注释里的分段标题、论坛签名档、社交平台简介,都只能拿字符当像素用。本页在站内的旧称呼是 ASCIIArt文本生成器,页面统一改用 ASCII 艺术字生成器这一术语。

它与站内几个名字相近的页面做的是不同的事。「文本转 ASCII」做字符编码换算,关心字符码值;「ASCII 表格生成器」做边框与对齐,关心行列线怎么画;「花体文本生成器」「粗体文本生成器」则用 Unicode 里已有的数学字母符号模拟字形,产出仍是普通文本行。本页走点阵渲染,产出必然是多行块状文本,每行都要靠等宽字体撑住对齐。

正因为是多行块状文本,本页最常解决的其实是排版麻烦:宋体或黑体这类比例字体里,井号、艾特符、空格的宽度互不相等,直接粘到聊天窗口会让整幅字符画扭成锯齿。页面因此把结果固定在等宽容器里,并把宽度、行数、总字符数一并报出,方便贴出去前先判断目标环境容不容得下。

计算原理与变量说明

字形表是整套机制的起点。每个字符被写成高 5 行、宽 3 列的一小块点阵,第 r 行第 c 列要么是描边位(井号),要么是空白位(空格)。渲染时把输入转成大写,逐字符取出点阵,取同一行拼起来,字符之间再塞 2 列纯空白。

为什么总宽不是宽度乘以字数列。点阵本身 3 列宽,但相邻两个字之间还要留 2 列空白,最后一个字后面不留,于是 n 个字符的图幅宽度是 5n − 2 列,而不是直觉里的 3n 列。示例 LIUQUAN 有 7 个字符,宽度落在 33 列、每行严格 33 字符、五行合计 165 字符——这 165 是包含行尾空格的:字母 N 第一行点阵末列是空白,这一格不能裁掉,否则各行长度不一致,粘到表格类环境会变成阶梯状。

为什么结果必须放进等宽字体容器。点阵渲染把「一个字占 3 列」写进了算法,但这只在每个字符等宽时才成立。比例字体下井号通常比空格宽、实心圆点又更宽,同一行前 3 列算出的水平位移到第 30 列已放大成肉眼可见的错位。pre 或 font-family:monospace 的作用就是把每个字符的宽度重新钉成同一份度量。

为什么未收录字符要用问号占位而不是跳过。字模只收录有限的一组形状:26 个拉丁字母加空格、感叹号、问号、连字符与句点,中文、数字、绝大多数符号都不在表里。遇到它们时若直接丢弃,后面的字符会整体左移,行宽与上面算出的 5n − 2 不再吻合,读者也失去了「这里原本有个认不出来的字」的线索。用问号顶上去既保住 3 列宽度,又留下可读的提示,页面还会在结果下方单列未收录清单。

为什么 dot 风格最容易歪。前三种风格的替身字符都是西文 ASCII 符号,宽度与空格的关系在常见等宽字体里固定。dot 风格把描边位换成实心圆点、空白位换成中间点,这两个字符在很多字体里属于中日韩标点类,实际宽度可能与西文空格不同——同一行里各处各差半格,到第 33 列就累计成差一整格还多的偏移。这也是它不如井号稳定的根因,只推荐用在社媒简介这类对列对齐容忍度高的地方。

完整示例(数值仅作演示)

输入 LIUQUAN、风格 block,页面给出的五行如下,由上面的字形表渲染得到,行宽 33 字符、合计 165 字符:

#    ###  # #  ###  # #   #   ## 
#     #   # #  # #  # #  # #  # #
#     #   # #  # #  # #  ###  # #
#     #   # #  ##   # #  # #  # #
###  ###  ###   #   ###  # #  # #

把风格切到 shade、star、dot,行数、每行字符数、行长完全不动,只是描边字符整体替换:shade 的第一行是 @ @@@ @ @ @@@ @ @ @ @@,star 的第一行是 * *** * * *** * * * **,dot 的第一行是 ●·· ●●● ●·● ●●● ●·● ·●· ●●·。三者的第五行分别是 @@@ @@@ @@@ @ @@@ @ @ @ @、*** *** *** * *** * * * *、●●● ●●● ●●● ·●· ●●● ●·● ●·●。

对照这组结果可以看出两件事:一是字母 Q 的第五行点阵是空格井号空格,那一列只有一个点,右下角的小撇就是它的尾巴;二是相邻字符之间恒定夹着两列空白,因此 LIUQUAN 里的 U 与 Q 不会粘成一团。若输入含中文或数字,那些字符会以问号字形出现,宽度照旧按 3 列加 2 列间隔计算。

字符画宽度与风格对照表

下表是输入长度与输出尺寸的关系,宽度按 5n − 2 计,总字符数为宽度乘行数。后几行默认折叠,点「加载更多」展开;「导出 CSV」带 UTF-8 BOM。

输入字符数输出宽度(列)行数总字符数
13515
313565
5235115
8385190
10485240
12585290
16785390
20985490
241185590
321585790
401985990
6431851590

下表是四种风格各自的描边字符与适用场合。

风格描边字符适用场合说明
block#终端、README 标题等宽字体下最稳
shade@评论区、聊天比井号更醒目
star*签名档不易被当作代码块
dot● / ·社媒简介视觉更柔和,但依赖字体支持

下表按投放场景给出选风格的经验判断。

投放场景推荐风格理由
README 顶部标题block阅读环境本身就是等宽或代码块
程序启动横幅block终端输出为等宽,列对齐可预期
评论区、聊天窗口shade艾特符比井号更醒目,也不易被当成话题标签
论坛签名档star星号不会被解析器当成代码块定界符
社媒个人简介dot视觉更柔和,但错位风险最高
代码注释里的分段标题block注释区域与代码同用一套等宽度量
窄屏截图任意 + 开自动折行横向滚动条不会进截图,但会牺牲列对齐
含中文或数字的内容不适用未收录字符一律以问号字形占位

结果边界、舍入与适用说明

常见问题

复制出去粘贴到聊天窗口,字形歪了怎么办?

目标环境没有使用等宽字体。点阵渲染的前提是每个字符占同样宽度,比例字体下井号与空格宽度不等,偏差会在同一行里逐列放大。请把目标换成代码块、等宽输入框或支持等宽的编辑器,或直接截图发出去。

为什么中文和数字会变成问号?

字形表只收录 26 个拉丁字母加空格、感叹号、问号、连字符与句点,其余字符一律按问号字形渲染,宽度仍是 3 列,后面的字符不会整体左移。想完整还原中文需要另一套更密集的点阵,不属于本页机制。

输入 7 个字符,为什么宽度是 33 列而不是 21 列?

每个字 3 列,相邻两个字之间还要夹 2 列空白,只有最后一个字后面不再补空白,所以总宽是 5n − 2。7 个字符对应 33 列,每行都是 33 字符,五行合计 165 字符。

dot 风格为什么比其他三种更容易错位?

它把描边位换成实心圆点、空白位换成中间点,这两个字符在很多字体里与西文空格的度量不同。同一行里多处各差一点,到第 33 列就积累成可见偏移。社媒简介这类对列对齐不敏感的场合可以用,终端与代码块里不建议。

能不能把两种风格混在同一幅图里?

页面不提供这个开关。混用后同一份点阵里会同时出现一两列宽的替身字符,一行里各处宽度不再一致,总宽也就不再等于 5n − 2,对齐算法随之失效。要两幅不同风格的图,请分两次生成。

为什么删掉行尾空格后看起来歪了?

渲染结果保证五行等长,每行都补齐到同一宽度。删掉行尾空白后各行长度不再相同,粘到按行定宽的环境会被二次折断,请整行复制。

这个工具免费吗?

免费,无需注册即可使用。

输入的数据安全吗?

安全。计算在当前浏览器本地完成,不会上传输入内容。

相关工具