返回博客

如何在 GitHub README、X 和终端里使用 ASCII 字符画

怎么在 README、X 和终端里用 ASCII 字符画?

ASCII 字符画要求每个字符宽度相同才能对齐。在 GitHub README 里,把它放进代码块;在终端里,只要窗口不比字符画窄,直接显示就行;在 X 上,帖子用的是比例字体,字符画基本都会错位,最好发成图片,或者控制得非常窄。

字符画为什么会变形?

字符画依赖等宽字体:每个字符(包括空格)占的宽度都一样。一幅 80 列的字符画,只有每一行的 80 列都和上一行对齐,看起来才是对的。

常见的破坏原因有三个:

  • 比例字体。 普通正文字体里,i 比 M 窄,空格也很窄,行与行就对不齐了。
  • 空格被合并。 HTML 和很多应用会把连续空格合成一个,有的还会删掉行首空格。
  • 自动换行。 窗口比字符画窄时,长行会折到下一行,整幅图就散了。

下面的所有技巧,都是在避开这三点。

在 GitHub README 里放字符画

把字符画放进围栏代码块:前一行写三个反引号,后一行再写三个。

```text
   /\_/\
  ( o.o )
   > ^ <
```

GitHub 会用等宽字体渲染代码块,并保留所有空格和换行,所以显示效果和你粘贴的一模一样。开头反引号后面的 text 可写可不写,它的作用是告诉 GitHub 不做语法高亮,否则字符画的某些部分可能被上色。

几点实用提醒:

  • 不要直接当普通 Markdown 粘贴。 在代码块外,Markdown 会合并空格,还可能把 *、_、#、- 这类字符当成格式符号。
  • 注意宽度。 GitHub 不会给代码块自动换行,太宽会出现横向滚动条。仓库页面的可读宽度有限,手机上更窄。做页头的话 60–80 列比较合适,想照顾手机就再窄一些。
  • 留意反引号。 如果字符画里本身有连续三个反引号,外层改用四个反引号。
  • 考虑背景色。 GitHub 有浅色和深色主题,为深色背景做的字符画,在部分访客那里看起来可能是反的。在意的话两种都测一下。

如果想让 logo 在任何地方都完全一致,也可以把字符画导出成图片提交到仓库,用普通图片语法引用,再在下面附一份代码块版本,方便别人复制。

在 X(Twitter)上发字符画

简单说:发图片。

X 用比例字体而不是等宽字体显示帖子,字符宽度不一,行就对不齐。在编辑器里好好的多行字符画,发出去通常是歪的。空格在发布过程中也可能被改动,App 和网页版的显示效果也可能不同。

可选做法,按可靠程度排序:

  1. 发截图或图片。 排版固定在像素上,所有人看到的都一样。记得加替代文字(alt text)描述画面内容,因为读屏软件读不出图片里的字符。
  2. 做得很小。 一两行、由宽度相近的字符组成的小图(比如 (o.o) 或 <(^_^)>)有机会保持原样,因为能错位的空间小。

另外别忘了字数限制:没有付费订阅时,单条帖子最多 280 个字符,一幅 80 列的字符画几行就用完了。这也是发图片更合适的原因之一。

在终端里显示字符画

终端默认就用等宽字体,所以字符画在这里几乎不用费心,主要看宽度。

很多终端默认打开时大约 80 列宽,这个尺寸沿袭自早期的字符终端。不超过 80 列的字符画不会被折行。可以用下面的命令查看当前尺寸:

tput cols   # 宽度(列数)
tput lines  # 高度(行数)

常见用法:

  • 从文件输出。 把字符画存成 logo.txt,运行 cat logo.txt。适合在脚本里显示项目横幅。
  • 登录时显示(MOTD)。 在很多 Linux 系统上,通过 SSH 登录后会显示 /etc/motd 的内容,把字符画放进去即可(需要 sudo)。有些发行版还会用 /etc/update-motd.d/ 里的脚本动态生成登录信息,具体看你的系统怎么配置。
  • 打开 shell 时显示。 在 ~/.bashrc 或 ~/.zshrc 里加一行 cat ~/logo.txt。尽量短一点,免得每开一个标签页都又慢又乱。
  • 在命令行工具里输出。 很多 CLI 工具启动时会打印一个小横幅。把它存成多行字符串,避免用制表符,因为制表符在不同环境下宽度不一样。

如果字符画在终端里显示错乱,通常是窗口比字符画窄,或者文件里有制表符、非 ASCII 字符,被字体渲染成了不同宽度。

图片字符画 vs. FIGlet 文字横幅

“ASCII 艺术”其实有两种,用的工具也不同。

文字横幅(FIGlet、toilet)图片转字符画
输入一个词或一句话照片、logo 或插画
输出用字符拼出的大号字母越暗的区域用越密的字符表现的画面
常见用途项目名称、CLI 页头头像、logo、插图

FIGlet 是一个经典的命令行程序:figlet Hello 会用选定的字体把 “Hello” 拼成大字。做文字标题用它就对了,但它不能把照片变成字符组成的画面,那是图片转字符画工具的活。

怎么把图片转成字符画

Artgen 的 ASCII 字符画生成器 用固定算法而不是 AI,把图片转换成 ASCII 字符画。

  1. 打开 ASCII 字符画生成器 并登录。上传一张不超过 5 MB 的图片,或者先点「试用示例图片」加载预览。
  2. 设置列数,可选 24–85 列,默认 80 列,正好对应标准终端宽度。
  3. 点击「转换图片」。加载示例图片本身不会自动转换,必须点这个按钮。
  4. 转换完成后,可以复制文本、下载 TXT 或下载图片,再放进 README 代码块、终端文件或脚本里。

列数怎么选:

  • README 页头: 60–80 列。
  • 终端 / MOTD: 80 列以内,保证默认窗口放得下。
  • 窄的地方(手机、聊天、小横幅): 从最小的 24 列左右开始,逐步加大,直到能认出主体。

主体清晰、对比强、背景简单的图片转换效果最好。上传前先把图片裁到主体。

这个转换登录后免费使用,无需积分。