思源宋体出现了以后一直想用到自己博客上面,做法一般是用工具把现成的字体给子集化(subsetting),有印象的是 Fontmin,然后又找到一个 font-carrier 。

这些字体子集化的工具都是用 node.js 写的。但是对于思源字体的 otf 支持很差劲,fontmin 根本没有支持,font-carrier 据说有支持,但是根本跑不通。两个库依赖的旧版本 OpenType.js 不能正确处理思源字体(新版本修复了)。

搞了半天没成功的我在 GitHub 搜,搜到了 fonttools/fonttools ,Python 写的,看起来很靠谱的样子。有各种字体工具,包括一个字体子集化的工具,运行成功以后就是上面的图。
安装

pip3 install fonttools

基本使用

pyftsubset <字体文件> --text=‘abcde’ --output-file=<输出>

实际上 --help 以后选项非常非常多,非常健壮和实用。

比如说可以用 glyphname、文本文件、unicode 等指定字形,还有压缩、hinting、features…而这只是这个工具本身附带的一个小工具而已。

搜了一下中文网络对这个工具竟然知之甚少,反而造了那么多个轮子,本文用来指路。

这不光前端,个人应用或者游戏想要嵌入字体的话也很好用。

pyftsubset HanziPenSC-W3.ttf --text='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' --output-file=HanziPenSC-W3-2.ttf

发表评论