最近在十年之约群里面看到大家讨论网站的字体,大家都是用 fonttools 进行字体瘦身,使用常用的 3500 字或者 6500 字来瘦身,我早在一年前也是这样做的,但是最近两天发文章 胡鑫宇事件 和电视剧《狂飙》的这两篇文章的时候,我就发现鑫和飙这两个字竟然没有在常用 3500 字里面。
我就想这样如果我每次遇到没在字体里面的字就打开电脑进行一次瘦身的话,就很麻烦。联想到另一个群有个人的网站友链中,如果有人的网站 301 到了另外一个域名,他的网站会自动更新到 301 的域名,我就想字体能不能也自动根据博客文章里面的文字更新。
于是方法来了
思路:
首先 Typecho 的文字全存在数据库,那么我们只需要获取数据库里面的中文就可以了,那就直接把数据库里面含有中文的几个表导出下来,全部合成一个 txt 文件,然后使用 fonttools 进行字体瘦身,顺便直接转为 woof2 格式就可以了,然后写出来一个 Python 脚本,让这个脚本定时去执行或者我们手动去执行就可以了。
首先我们需要导出的 Typecho 表只需要这六个
导出为 CSV 之后,我们可以通过正则表达式,只保留中文以及中文符号,然后把他合成为一个 txt 文件,文件里面的汉字也不需要去重
然后使用 fonttools 进行瘦身就可以了,瘦身完再把字体转成 woff2,然后更新到网站目录上面就可以了,比如现在这个 “慧” 是没有的,它是第一次在我的网站中出现,当脚本自动执行之后,他就可以正常显示了下面是最终的 python 代码,我也懒得优化,反正能跑就可以
然后我放到了宝塔的计划任务,每天凌晨执行一次应该就可以了,也可以在加上 CDN 的 API 刷新一下字体文件的缓存
代码比较长,放GitHub吧,有需要的可以打开参考一下
Typecho_Fonts_Slimming
python3.10 fonttools pymysql pandas
通过链接typecho的数据库获取数据库中的中文汉字以及标点符号,然后通过fonttools对字体进行子集化,最后转为woff2替换掉网站现有的woff2文件
本站使用后 woff2 字体文件只有 148kb,仅比 FiraCode 的 woff2 字体文件大 8kb,而且完全不会影响后期其他生僻字的添加与修改,如果我们删除了一些含有生僻字的文章,字体文件也会相对应减少。
这样网站上面的字体通过数据库里面的汉字进行动态的修改,只不过适合文字数量比较少的网站,如果数据库文件在几百M,可能会出现不可预估的错误
帮助到你了的话可以帮我点一下GitHub的星星
原创文章,博客地址:https://www.wcnmb.cn/68.html