ASCII 艺术字是开发者文化里历史最悠久的传统之一——从终端启动 Banner 到 README 头部标题,从 IRC 频道问候到 CI 日志分隔线。这篇文章讲清楚 ASCII Art 文字的生成原理、FIGlet 字体选择技巧,以及如何用在线工具秒出效果。

什么是 ASCII 艺术字?

ASCII 艺术字(ASCII Art Text)用标准可打印字符拼出大号字形。它不依赖像素,只要是等宽字体环境就能正确渲染——终端、Markdown 文件、源码注释、纯文本邮件都适用。

 _   _      _ _       
| | | | ___| | | ___  
| |_| |/ _ \ | |/ _ \ 
|  _  |  __/ | | (_) |
|_| |_|\___|_|_|\___/ 

FIGlet 字体的工作原理

FIGlet(Frank, Ian, and Glenn’s Letters)是生成 ASCII 艺术字的标准库。每个 FIGlet 字体是一个 .flf 纯文本文件,把每个字符映射成多行 ASCII 字形。引擎读入字符串,逐字查找字形,按行拼装输出。

影响输出的关键参数:

  • 字体(Font) — 决定字形风格(方块、脚本、阴影、3D 等)
  • 宽度(Width) — 每行最多字符数,超出自动换行
  • 布局(Layout) — 字符间距(完整、紧凑或压缩)
  • 方向(Direction) — 从左到右或从右到左

常用 FIGlet 字体推荐

字体风格适用场景
standard清晰可读README 标题、通用场合
banner全大写粗体短 Banner 和公告
slant斜体感代码分区分隔符
shadow双重阴影终端欢迎语
big大号简洁快速醒目展示
block粗壮 3D项目 Logo
script类草书创意标题
doom太空侵略者风格游戏项目、复古感
speed圆润现代现代 CLI 工具
3d立体感有深度的 Logo

常见使用场景

README 头部标题

GitHub 和 GitLab 会在代码块里正确渲染 ASCII 艺术字:

```
  ____                 _____           _ 
 / __ \___  ___ ____  |_   _|__   ___ | |
/ / _` / _ \/ _ `|/ _` || |/ _ \ / _ \| |
\ \__,_\___/\_,_/_/|_/ |_|\___/\___/|_|
 \____/                                  
```

宽度建议控制在 80 字符以内,兼容大多数终端和 GitHub 预览面板。

终端启动 Banner

~/.zshrc~/.bashrc 加一段 ASCII Banner,每次打开终端都能看到:

# ~/.zshrc
cat << 'EOF'
  ____              _       ___  __ ___ 
 |  _ \ _____   __/ \     / _ \/ _/ __|
 | | | / _ \ \ / / _ \   | | | | |___ \
 | |_| |  __/\ V / ___ \  | |_| | |___) |
 |____/ \___| \_/_/   \_\  \___/|_|____/
EOF

源码分区分隔符

大型源码文件里用 ASCII 分隔线区分逻辑块,扫描时一目了然:

# ============================================================
# ██████╗  █████╗ ████████╗ █████╗ ██████╗  █████╗ ███████╗███████╗
# ██╔══██╗██╔══██╗╚══██╔══╝██╔══██╗██╔══██╗██╔══██╗██╔════╝██╔════╝
# ============================================================

CI 日志与 Docker 标签

CI 系统(如 GitHub Actions)里在步骤开头打印 ASCII Banner,让长日志更易定位:

- name: Build Banner
  run: |
    echo "  ____  _   _ ___ _     ____  "
    echo " | __ )| | | |_ _| |   |  _ \ "
    echo " |  _ \| | | || || |   | | | |"

代码生成 ASCII 艺术字

Node.js(figlet)

npm install figlet
import figlet from 'figlet';

// 回调形式
figlet.text('你好世界', { font: 'Standard' }, (err, data) => {
  if (err) throw err;
  console.log(data);
});

// 同步形式
const result = figlet.textSync('ZeroTool', { font: 'Slant' });
console.log(result);

注意:FIGlet 标准字体对中文支持有限,建议用英文输入或拼音代替。

Python(pyfiglet)

pip install pyfiglet
import pyfiglet

# 默认字体
result = pyfiglet.figlet_format("Hello World")
print(result)

# 指定字体
result = pyfiglet.figlet_format("ZeroTool", font="slant")
print(result)

# 查看可用字体数量
fonts = pyfiglet.FigletFont.getFonts()
print(f"共 {len(fonts)} 个字体")

Go(go-figure)

go get github.com/common-nighthawk/go-figure
import figure "github.com/common-nighthawk/go-figure"

func main() {
    myFigure := figure.NewFigure("Hello World", "standard", true)
    myFigure.Print()

    // 彩色输出
    colorFigure := figure.NewColorFigure("ZeroTool", "slant", "green", true)
    colorFigure.Print()
}

宽度与换行注意事项

ASCII 艺术字在容器过窄时会错位。经验规则:

  • 80 列:适合大多数终端,经典默认值
  • 120 列:适合 IDE 终端和现代宽屏
  • Logo 场景:绝对避免换行,生成前先确认目标宽度

字符较窄的字体(speedsmall)同等宽度能容纳更多文字。用在线生成器的宽度预览功能提前确认再复制。

输出优化技巧

  1. 窄字体优先用大写 — 许多 FIGlet 字体针对大写字母设计,小写字形可能不协调
  2. 必须在等宽字体环境下预览 — 比例字体会导致行错位
  3. 一键复制 — 在线工具复制的是原始多行字符串,保留精确间距
  4. 不同目标需要转义 — JSON 字符串里换行必须是 \n;YAML 里用块标量(|)保留字面换行

使用在线 ASCII 艺术字生成器

使用 ZeroTool 文字转 ASCII Art 工具 →

粘贴任意文字,从 200+ FIGlet 字体中选择,实时预览,一键复制。无需安装,无需 API Key,无限制,完全在浏览器本地运行。

功能亮点:

  • 输入即时预览,切换字体实时更新
  • 200+ FIGlet 字体按风格分类
  • 一键复制到剪贴板
  • 宽度控制,适配不同目标容器
  • 首次加载后离线可用

即时生成 ASCII 艺术字 →