[项目]本地google font api格式的字体服务器

Leaphy 发布于 2025-07-02 最后更新于 2025-07-02 419 次阅读


AI 摘要

[项目]本地google font api格式的字体服务器 这是一个为解决Google Fonts在国内访问不稳定问题而开发的本地字体服务项目。由于WordPress主题Sakurairo依赖Google Fonts API,导致网站前后台都可能出现加载延迟或失败的情况。 主要功能: - 支持将TTF/OTF字体文件切片并自动转换为WOFF2格式 - 提供类似Google Fonts API的本地服务接口 - 兼容Google Fonts原本不支持的字体(如HYWenHei) 当前限制: - 不支持字体特效和子集化(subset)指定功能 - 处理大型字体文件(如Noto Sans SC)时性能较低,可能需要数小时完成子集化 项目包含简单的预览界面,可以查看字体效果。虽然功能不如原版API全面,但能有效解决国内访问Google Fonts不稳定的问题。

引子

本blog使用的主题是Sakurairo,它默认使用google font api来提供字体服务,同时允许使用额外的字体文件。但是问题来了,fonts.googleapis.com在国内不能说是完全不能访问吧,起码也是处于accessible与unacceptable之间的量子叠加态。Sakurairo默认使用了部分google api提供的字体,比如Noto Serif SC、Noto Sans SC、Fira Code、etc。如果api无法访问会直接影响网站的访问速度,虽然使用wp的字体本地化插件可以解决前台的部分字体问题,但是更严重的是,Sakurairo对wp的后台也进行了字体定制,而这些插件似乎无法缓存后台的字体,导致wp后台直接爆炸。

最终催生了此项目。。。

)喜欢喵喵老师(Sakurairo项目contributor)朴实无华的解决方案

这个拒绝通过吧,ctrl+F5直接给我屏蔽了

介绍

项目介绍详见github的README readme是ai补的( ,这里简单介绍下。

支持将ttf格式或者otf格式的字体文件切片并且自动转换成woff2格式。(实测切片出来的子集里如果两个子集有交集浏览器会直接报错,当时遇到这个问题也是百思不得其解啊)

这是一张css请求的截图:

css的拼接等较为耗时的操作尽量使用了functools.lru_cache装饰器做了优化,确实可以降低几毫秒的服务器响应速度。

带一个简单的预览界面:

可以支持google font api本来没有的字体,比如HYWenHei

已知问题

在功能方面肯定是比不上真正的google font api的,比如不支持字体特效与subset子集化指定。

对于某些字体,比如Noto Sans SC这类字符集较大的字体,我开了8个线程吃了大半个cpu都跑了几个小时才完成子集化操作,可能是cmap的遍历太耗时了,暂时没有想好解决方法。

写在最后的话

代码是矢山,欢迎合理讨论,拒绝人身攻击。

此作者没有提供个人介绍。
最后更新于 2025-07-02