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 场景:绝对避免换行,生成前先确认目标宽度
字符较窄的字体(speed、small)同等宽度能容纳更多文字。用在线生成器的宽度预览功能提前确认再复制。
输出优化技巧
- 窄字体优先用大写 — 许多 FIGlet 字体针对大写字母设计,小写字形可能不协调
- 必须在等宽字体环境下预览 — 比例字体会导致行错位
- 一键复制 — 在线工具复制的是原始多行字符串,保留精确间距
- 不同目标需要转义 — JSON 字符串里换行必须是
\n;YAML 里用块标量(|)保留字面换行
使用在线 ASCII 艺术字生成器
使用 ZeroTool 文字转 ASCII Art 工具 →
粘贴任意文字,从 200+ FIGlet 字体中选择,实时预览,一键复制。无需安装,无需 API Key,无限制,完全在浏览器本地运行。
功能亮点:
- 输入即时预览,切换字体实时更新
- 200+ FIGlet 字体按风格分类
- 一键复制到剪贴板
- 宽度控制,适配不同目标容器
- 首次加载后离线可用