基础

什么是 ASCII 字符画?简史与主要类型

用键盘字符画出的图是怎么回事,又是从哪里来的。

最后更新:

ASCII 字符画是只用键盘上能打出的字符画出的图。它没有颜色,也没有线条,而是把 /、\、_、| 等字符一行行排列,拼出文字或图案。

 |\__/|
( o  o )
=\ ww /=
 /    \
(_|  |_)

五行高的小猫,和终端程序启动时打印的大 Logo,都是 ASCII 字符画。

什么是 ASCII?

ASCII 是 1963 年首次作为美国标准发布的字符编码。它让每台计算机对每个字符使用相同的编号。128 个编码中有 95 个是可打印字符:英文大小写字母、数字、空格,以及 ! @ # $ % ^ & * ( ) - _ = + [ ] { } ; : ' " , . < > / ? \ | ~ 等符号。

几乎所有计算机和字体都支持这 95 个字符,所以只用它们画出的图粘贴到哪里都不会变成乱码。这也是 ASCII 字符画流传至今的重要原因。

简短的历史

  • 打字机图画。 用字符作画比计算机还早。从 19 世纪末开始,就有人在打字机上叠打字母和符号来作画。
  • 打印机与研究所。 1960 年代,能打印图像的打印机很少见,于是人们用字符来打印图画。著名的例子是 1966 年贝尔实验室的 Ken Knowlton 和 Leon Harmon,他们把一张照片变成了由小符号组成的网格。
  • 表情符号。 1982 年,卡内基梅隆大学的 Scott Fahlman 提议在留言板上用 :-) 来标记玩笑。
  • BBS 与 ANSI 艺术。 在 1980 到 1990 年代的拨号电子公告板(BBS)上,人们用字符画装饰登录画面和签名。结合 IBM PC 方块字符(█ ▓ ▒ ░)和颜色的图画被称为 ANSI 艺术。
  • FIGlet。 1991 年,Glenn Chappell 和 Ian Chai 编写了 FIGlet,一个把文字变成由字符组成的大横幅的程序。时至今日,它仍是制作终端程序启动 Logo 和 README 横幅最常用的方法。
  • 颜文字。 在日本,(^_^) 这种正面阅读的表情流行开来。随着 Unicode 普及,人们开始混用各种文字的字符,比如 ʕ•ᴥ•ʔ 和 ¯\_(ツ)_/¯。

ASCII 字符画的类型

类型 是什么 例子
文字横幅 用 FIGlet 字体把文字变成多行大字 启动画面、README 标题
线条画 用 / \ _ | 等字符勾勒轮廓 小猫、蛋糕
明暗画 用 .:-=+*#%@ 等浓淡不同的字符填充区域 转换后的照片
方块与 ANSI 艺术 用 █ ▓ ▒ ░ 等方块字符拼成的图 游戏 Logo、像素画
颜文字与单行图案 用一行表现表情或动作 (╯°□°)╯︵ ┻━┻

严格来说,只使用 95 个 ASCII 字符的才算 ASCII 字符画。使用 █、ツ 等范围外字符的图,叫作 Unicode 艺术或符号图案。日常使用中,人们通常把它们统称为 ASCII 字符画。

为什么需要等宽字体?

ASCII 字符画默认每个字符宽度相同。在代码编辑器和终端使用的等宽字体中,i 和 W 占用同样的宽度,所以各行能对齐。

大多数聊天软件和社交应用使用比例字体,每个字符宽度各不相同。把 ASCII 字符画粘贴进去,空格和 i 会变窄,W 和 @ 会变宽,图就会左右错位。

有三种解决办法。

  1. 使用代码块。 在 Discord、Slack、GitHub 等支持代码块的地方,用 ``` 把图包起来,就会切换成等宽字体。请参见如何把 ASCII 字符画粘贴到 Discord。
  2. 使用较窄的图案。 单行颜文字或较窄的字体不容易露出问题。请参见为什么 ASCII 字符画在聊天应用里会乱。
  3. 以图片发送。 把字符画保存为 PNG,在任何应用里看起来都一样。

用在哪里?

  • 终端程序的 Logo 和服务器登录画面
  • GitHub README 的标题横幅和代码注释中的分隔标记
  • Discord 服务器公告和游戏聊天
  • 生日祝福和社交媒体简介

在 lab.ascii 输入文字,就能一次得到 12 种字体的文字横幅。想转换照片,请使用图片转字符画。