减少中文 WEB 字体体积的方法

2025 年 12 月 2 日
 malagebidi
中文字体体积巨大,一般不用在 web 上,但我想到一种办法,为什么不把中文字按照偏旁部首一笔一划拆开呢?这样每个文字都可以组合出来了,体积最终大幅缩小 🐶
3983 次点击
所在节点    奇思妙想
27 条回复
InDom
2025 年 12 月 2 日
FSS(Font Style Sheets) 是吧?
jydeng
2025 年 12 月 2 日
那组合字体的结构数据很大,我觉得区别不大
xtreme1
2025 年 12 月 2 日
然后只有 Word 能正确显示中文
在 LaTeX 中输入中文需要先学一周
penisulaS
2025 年 12 月 2 日
大就大吧,现在似乎不那么在意体积了,以前做地图的时候,中文还需要做字体压缩啥的,只保留用到的字
shintendo
2025 年 12 月 2 日
拆部首感觉不靠谱,同一部首在不同结构的字上也不一样,拆笔画就更扯了。

退一万步讲,即使可行,我也很怀疑“体积大幅缩小”的结论。
codehz
2025 年 12 月 2 日
你不会是想说思源宋体的那种 ⿺辶⿳穴⿰月⿰⿲⿱幺长⿱言马⿱幺长刂心 彩蛋吧,然而不幸的是,这玩意虽然看上去可组合,但实际上还是得自己一个个拼,虽然现在字体引擎能干的事挺多,比如能塞一个 wasm ,但拼文本这种活还是够呛
gfwuzer
2025 年 12 月 2 日
Google font 上的字体貌似是按照频率拆分成了 100 多个文件。
codehz
2025 年 12 月 2 日
@penisulaS 笑死,字体 woff2 压缩下也就十几 M ,几个 js 加高清大图就瞬间几十 M 了(
est
2025 年 12 月 2 日
这个思路早就有人想了

Unicode IDS —— Ideographic Description Sequences (表意文字描述序列)

不支持一是需要操作系统增加复杂的渲染机制。

二是造出来的字基本都很丑。。。。
alphat
2025 年 12 月 2 日
那浏览器渲染还需要单独处理了,还要做成标准规范等等,性价比太低了
一般做法是以字为单位进行优化
alphat
2025 年 12 月 2 日
@codehz #8 你应该没听过雪碧图吧,有时就是为了省十几 K
zsj1029
2025 年 12 月 2 日
现在很多静态博客,根据文字内容,只打包出来用到的字体就小很多,如果是动态内容,就不要换中文字体了,除非是本地部署单机应用
Razio
2025 年 12 月 2 日
chrome 生成 PDF 的时候,就是按字拆出来的
opengps
2025 年 12 月 2 日
为什么要缩小体积?
以往的理由是:网络不够快,硬盘不够大,内存不够大。。。现在这些都不是问题,为什么还要去压缩体积?
mumu
2025 年 12 月 2 日
不是有开源项目吗,支持根据你页面的文字,来动态生成 ttf ,就是仅保留你页面设计的文字,然后就体积小了
DualVectorFoil
2025 年 12 月 2 日
请看 https://github.com/notofonts/noto-cjk-varco
(题外话不知道为啥谷歌在上个月突然把 noto cjk 的字体归档了)

如果是想在个人博客或者网站上使用中文,还可以考虑分包后按需加载 https://github.com/KonghaYao/cn-font-split
Mithril
2025 年 12 月 2 日
不可行的。

字体不是简单的偏旁部首拼到一起,那样字体根本没法用。做一套字体成本很高,主要是每个字想要好看,同时写成一句话以后重心统一,是需要手动调整的。

比如“好”,“妙”,“如”这三个字,偏旁都一样,但你把“好妙如”放大看,它们这个女字旁的大小和位置都是不一样的(最终效果取决于你用的字体,或者你找在线的试一下,衬线字体尤为明显)。这个主要就是为了保证这些字单独看起来不会失去平衡,同时连在一起后中心也大致在一个水平线上。

另外 hint 也没法弄。

目前绝大多数的字体都是矢量字体,你可以认为里面保存的都是一些构成字形曲线的函数。真正显示出来,需要把这些东西渲染成点阵。就和游戏渲染差不多。
这个过程中会根据每个字的 hint 进行微调。保证主要结构的位置,其它的会适当变形,让点阵结果看起来不会扭曲的很难看。

简单拼凑偏旁部首的话,这些都没法解决。如果每个字都做单独调整,那和你现在的字体大小就没什么区别了。
HADB
2025 年 12 月 2 日
之前做了一个 font2svg 的方案: https://hadb.me/posts/2023/font2svg-solution
公司内部用的,核心的部分已经开源 font2svg-api
shadowyue
2025 年 12 月 2 日
只把你用到的汉字打包成字体就行,有成熟方案
maplezzz
2025 年 12 月 2 日
现在比较常用的字体体积优化方案是基于文字的 unicode-range 懒加载所用的字体分包

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1176398

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX