python提取字体文件中的常用3500字

发布于2023-05-08 20:44:56字数1

前言

在开发网站时遇到好看的字体,我们想要让网页加载自定义字体文件,但是通常的字体格式(TTF、OTF)体积太大了,这就需要我们将其转换为更小体积的字体文件格式(WOFF2)。

通过fontTools将TTF、OTF字体文件转为WOFF2格式

fontTools是一个用于操作字体的库,用Python编写。该项目包括TTX工具,它可以将TrueType和OpenType字体转换为XML文本格式,也称为TTX。
我们使用pip安装fontTools:
pip install fontTools
这样直接安装全局到中python中;顺带说一句,该包需要Python 3.8或更高版本
接下来我们就直接编写代码转换字体文件格式了。

先提取需要的字体文字

中文汉字数量很多,我们大部分时候只会用到那最常用的3500字,如果把整个字体文件的文字都提取到很有可能有些生僻字我们压根用不到,这也会导致字体文件过大,所以我们先提取那最常用的3500字就行。
这里用到的字体我用了筑紫A丸字体,这也是我这个博客所用到的字体,我们搜索这个字体下载下来,可以看到基本能下载到的都是ttc格式的。
直接编辑python代码提取字体:

from fontTools.subset import Subsetter
from fontTools.ttLib import TTFont

# 加载字体文件
font = TTFont('./ZhuZiAWan-2.ttc',fontNumber=0)
# 读取要提取的字符集
with open('./常用3500字.txt', 'r', encoding='utf-8') as f:
    chars = f.read()
# 构造子集化器
sub = Subsetter(options=None)
# 提取字符集中的字符
sub.populate(text=chars)
# 生成子集化后的字体文件
sub.subset(font)
# 保存文件
font.save("ZhuZiAWan.tff")

这样提取文字后把ttc格式转成了tff格式。这个时候tff格式字体文件已经对比之前的ttc格式文件大小小了很多了。

通过fontTools库的compress方法将tff格式文件转为woff2格式

from fontTools.ttLib.woff2 import compress

compress("./ZhuZiAWan.tff","./woff2/ZhuZiAWan.woff2")

执行完这些后,我们可以发现原先20多m的字体文件最后只有700多k大小了,这个大小已经足够我们在网站中引入,且不会因为文件太大而使得字体加载过慢了。

评论

back top