字体工程工具:构建、检查和压缩
适合谁看:已经会用编辑器,想把字体源文件自动生成成品字体、做质量检查、输出网页字体的设计师和开发者。
为什么需要「工程工具」
在编辑器里点「导出」能得到字体文件,但项目一大,就会遇到这些问题:
- 字重多、格式多,每次手动导出容易漏;
- 多人协作,需要每次都用同一套设置生成;
- 发布前要检查几十上百项规范,人工检查不现实。
所以很多开源字体项目会把「源文件 → 成品字体 → 检查 → 压缩」写成命令,一条命令跑完。
常见工具一览
| 环节 | 工具 | 许可证 | 做什么 |
|---|---|---|---|
| 构建 | fontmake | Apache-2.0 | 把 .glyphs、.designspace、.ufo 源文件编译成 OTF、TTF 或可变字体 |
| 构建 | fontc | Apache-2.0 | 用 Rust 重写 fontmake 的字体编译器,项目说明称目标是安全和快速 |
| 构建(底层库) | glyphsLib | Apache-2.0 | 把 Glyphs 源文件转换成 UFO 和 designspace |
| 构建(底层库) | ufo2ft | MIT | 把 UFO 源文件编译成 OpenType 字体 |
| 检查 | Font Bakery | Apache-2.0 | 命令行字体质量检查工具,内置多套检查规则 |
| 检查 | Fontspector | Apache-2.0 | Font Bakery 的 Rust 移植版,项目页称其为 Font Bakery 的继任者 |
| 压缩 | woff2 | MIT | Google 的 WOFF2 参考实现,woff2_compress / woff2_decompress |
| 网页 | glyphhanger | MIT | 找出网页用到哪些字,并据此生成子集 |
| 网页(中文) | cn-font-split | Apache-2.0 | 把中文字体按字分片,生成带 unicode-range 的 CSS |
许可证信息来自各项目的 GitHub 页面(2026 年 10 月查阅)。
一个最小的流程
# 1. 从 Glyphs 源文件生成可变字体
fontmake MyFont.glyphs -o variable
# 2. 质量检查(通用规则)
fontbakery check-universal variable_ttf/*.ttf
# 3. 压缩成 WOFF2
fonttools ttLib.woff2 compress variable_ttf/MyFont-VF.ttf
实际的输出文件名和目录以工具的说明为准。fontmake 不指定格式时,默认输出 OTF 和 TTF。
检查工具查什么
Font Bakery 这类工具会检查:
- 字体名称、版本号、版权和许可信息是否齐全一致;
- 字重数值(如 400、700)和样式名是否对应;
- 垂直度量(行高相关数值)是否合理;
- 轮廓有没有明显问题、可变字体的轴设置是否规范。
不同平台(如 Google Fonts、Adobe Fonts)有各自的检查规则集。检查报告里的「失败」不一定都要改,但每一条都值得看懂。
中文项目的特别之处
- 中文字体字数多,构建和检查耗时长,可以先用少量字试跑流程;
- 发布网页字体时,中文一般需要子集或分片,
见《见《中文网页字体为什么要拆分子集》和《和《按字分片:cn-font-split》; 大型字库的分工协作见《大型字库的分工协作见《大型字库怎么协作:以思源黑体为例》。
参考资料
- fontmake:https://github.com/googlefonts/fontmake
- fontc:https://github.com/googlefonts/fontc
- glyphsLib:https://github.com/googlefonts/glyphsLib
- ufo2ft:https://github.com/googlefonts/ufo2ft
- Font Bakery 文档:https://fontbakery.readthedocs.io/en/stable/
- Fontspector:https://github.com/fonttools/fontspector
- woff2:https://github.com/google/woff2
- glyphhanger:https://github.com/zachleat/glyphhanger
- cn-font-split:https://github.com/KonghaYao/cn-font-split