Maple Mono WOFF2 字体压缩:414KB 变量字体压到 128KB 的完整流程
【免费下载链接】maple-fontMaple Mono: Open source monospace font with round corner, ligatures and Nerd-Font icons for IDE and terminal, fine-grained customization options. 带连字和控制台图标的圆角等宽字体,中英文宽度完美2:1,细粒度的自定义选项项目地址: https://gitcode.com/GitHub_Trending/ma/maple-font
Maple Mono WOFF2 字体压缩是这套开源圆角等宽字体面向网页场景的体积优化:常规体变量字体的 TTF 源文件 414KB,压缩后只剩 128KB。
📊 先看关键数字:WOFF2 压缩前后大小对比表
下表数据全部取自仓库内提交的文件,任何人在本地都能用ls -l复测:
| 字体文件 | 原始 TTF | WOFF2 压缩后 | 体积降幅 |
|---|---|---|---|
| MapleMono[wght]-VF(常规体) | 414.2 KB(424,152 B) | 127.8 KB(130,908 B) | 69.1% |
| MapleMono-Italic[wght]-VF(斜体) | 461.9 KB(473,016 B) | 149.2 KB(152,816 B) | 67.7% |
常规体和斜体各用一个 WOFF2 文件覆盖 100–800 全部字重(变量字体,即用一个文件替代 8 个静态字重文件的格式),网页端因此只需加载 2 个文件、合计约 277KB。
🧩 原理怎么工作:像真空袋一样压掉字体里的重复数据
一个 TTF 字体文件由几十张"表"拼成,字模轮廓、字距、校验和各有分工。WOFF2(Web Open Font Format 2.0,W3C 推出的网页字体封装格式)的做法,相当于先拆掉礼品盒的多余包装纸,再把整盒东西塞进真空压缩袋:第一步删减非必要内容,第二步用 Brotli(一种比 Gzip 同类算法压缩率更高的字节流压缩算法,量级上比 DEFLATE 每百字节多挤出十几字节)对剩下的表数据做整体压缩。
关键在第二步能压出近 70% 的空间。字体表里有大量重复结构——成千个字形的坐标数据模式高度相似,Brotli 基于 LZ77 把这些重复片段替换成"位置+长度"的短引用,加上 16KB 的滑窗回看,压缩比明显高于 WOFF1 使用的 DEFLATE。
Maple Mono 在这之上多走了一步:压缩前先用build.py --ttf-only --no-nerd-font --least-styles重建一份不含 Nerd Font 图标、只保留必要字重的精简 TTF(仓库里带图标的 NF 基字体约 1.9MB),再交给 fonttools 封装成 WOFF2。先删后压,是降幅能到 69% 而不是 WOFF2 常见的 40%–50% 的原因。
🔍 用仓库证据说话:page.py 里只有两行命令
整条流水线由 task.py 的page --woff2参数触发,真正干活的是 source/py/task/page.py 中的这一段(第 82–94 行):
if woff2: font_dir = joinPaths(submodule_path, "public", "fonts") os.system("python build.py --ttf-only --no-nerd-font --least-styles") os.system(f"ftcli converter ft2wf -f woff2 {var_dir}") shutil.rmtree(font_dir, ignore_errors=True) os.makedirs(font_dir, exist_ok=True) for filename in os.listdir(var_dir): if filename.endswith(".woff2"): os.rename(joinPaths(var_dir, filename), joinPaths(font_dir, filename.replace(".ttf.woff2", "-VF.woff2")))第一行重建精简 TTF,第二行调用ftcli converter ft2wf完成 WOFF2 转换,最后把产物改名搬进落地页的public/fonts目录。压缩能力来自 requirements.txt 中声明的fonttools==4.62.1与brotli==1.2.0;仓库里已提交好的成品在 woff2/var/,TTF 源文件在 source/MapleMono[wght]-VF.ttf。
🛠 三步自己复现:3 步构建 Maple Mono WOFF2
- 克隆仓库并初始化子模块:
git clone https://gitcode.com/GitHub_Trending/ma/maple-font,进入目录后执行git submodule update --init - 安装依赖(pyproject.toml 要求 Python ≥ 3.10):
pip install -r requirements.txt - 运行构建:
python task.py page --woff2
跑完后检查maple-font-page/public/fonts下是否出现两个.woff2文件,体积与上表一致即可。
⚠️ 容易踩的坑:submodule 未初始化与 brotli 条件依赖
- 子模块缺失直接报错:
page命令要求maple-font-page子模块存在,source/py/task/page.py 开头就有检查,没执行git submodule update --init会直接退出。 - brotli 是条件依赖:requirements.txt 里 CPython 装
brotli,其他实现装brotlicffi;缺了它 fonttools 无法输出 WOFF2,手动管理依赖时别漏掉这个平台标记。 - woff2 不是完整字体:
--no-nerd-font --least-styles意味着产物没有 Nerd Font 图标、字重集也是精简的,别拿它替换终端用的完整字体;带图标的 NF 基字体约 1.9MB,在 source/ 目录下。
Maple Mono 的网页字体加载体验,基本就是这两行os.system换来的;完整特性列表与下载入口见 README.md。
【免费下载链接】maple-fontMaple Mono: Open source monospace font with round corner, ligatures and Nerd-Font icons for IDE and terminal, fine-grained customization options. 带连字和控制台图标的圆角等宽字体,中英文宽度完美2:1,细粒度的自定义选项项目地址: https://gitcode.com/GitHub_Trending/ma/maple-font
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考