mirror of
https://github.com/2234839/web-font.git
synced 2026-09-13 04:15:42 +08:00
subsetOTF 的 buildSubsetMetrics 原把所有 subsetGids 展开为完整 4 字节 (advance+lsb),丢失 hmtx 规范的 numberOfHMetrics 压缩语义。CJK 全角字体 子集后几乎所有 advance 相同(如 1000),尾部 N-1 个 glyph 可只写 lsb(2字节)。 从尾部向前找最长连续相同 advance 段,numberOfHMetrics 收缩为最后一个不同 advance 的位置+1,hhea/vhea 的 numberOfHMetrics 同步 patch。 渲染等价(浏览器对 gid>=numberOfHMetrics 复用最后一个 advance),SSIM 不变。 收益(3 otf 用例 woff2 共 -144B): - otf-白狐千字文 35880→35792 (-88B) - otf-五个汉字 15020→14984 (-36B) - otf-思源黑体 10120→10100 (-20B) TTF 路径 fonteditor-core 已做此压缩(思源/霞鹜/FiraCode numHM=1), OTF 路径手写 buildSubsetMetrics 漏做,属 TTF/OTF 对称补齐(模式③)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>