- 由于中文的字体文件包含非常多的字符,因此字体文件往往非常大;
Google Fonts给出了相当不错的解决方案:由于CSS支持为同一个字体的不同部分指定不同的字体文件,在加载网页时按需加载,因此可以将字体事先做好字符子集化,并设置好相应的CSS文件,这样在加载网页时即可尽量减少消耗不必要的网络流量了。 Google Fonts给出的API的例子有:Noto Sans SC, Noto Sans JP- 然而,
Noto Sans(同Adobe的Source Han Sans系列) 在网页上上的渲染效果并没有更纱黑体好,因此出于替换用目的,我写了此工具用于分割更纱黑体以取代谷歌提供的Web Font;如果您手上有其他字体需要进行分割,也可以使用此工具; - 由于我个人并没有技术像谷歌那样计算好怎么分割字体比较合适,每个字体需要哪些字形,因此此工具参照了谷歌的
CSS文件,完全按照谷歌的分割方式进行分割,在使用时需在本地导入一份谷歌的CSS样式文件;当然如果您手上有别的分割方法,也可以将其写入一个CSS文件中进行导入;或者如果您有别的更好的方式进行分割,欢迎Pull Request - 请务必使用对应地区化字形的分割方式,例如,
- 本工具设计的时候只考虑了谷歌的
CSS格式,即以正则表达式(?<=unicode-range: ).+?(?=;)进行匹配,如果您本地想要导入的CSS文件中的冒号后并无空格,请手动删除 - 本工具基于
Python的fonttools中的pyftsubset - 请注意,
CSS支持对一个字体设置Normal和Italic两种样式,而本工具一次只能对其中一种进行处理;如需对两种样式都进行处理,请修改设置运行两次 - 更新:利用多个
CSS文件补齐CJK部分
summonFonts_extra.py可以在生成CSS文件后,比对剩余文件包含的字符,从而补齐CJK部分
- 请先安装
fonttools和brotli:
pip install fonttools
pip install brotli
- 然后,请确保
pyftsubset所在的文件夹在您的系统的环境变量 Path中 - 将您需要应用的分割方式的
CSS文件从Google Fonts上下载下来并保存在本地 - 准备您需要使用的字体文件
- 使用文本编辑器打开
py文件,在文件开头处填写好相关设置 - 运行本工具
- 将生成结果上传至您的服务器,应用在网页中