V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
malagebidi
V2EX  ›  奇思妙想

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

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

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

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

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

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

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

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

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

    另外 hint 也没法弄。

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

    简单拼凑偏旁部首的话,这些都没法解决。如果每个字都做单独调整,那和你现在的字体大小就没什么区别了。
    HADB
        18
    HADB  
       4 天前   ❤️ 2
    之前做了一个 font2svg 的方案: https://hadb.me/posts/2023/font2svg-solution
    公司内部用的,核心的部分已经开源 font2svg-api
    shadowyue
        19
    shadowyue  
       4 天前
    只把你用到的汉字打包成字体就行,有成熟方案
    maplezzz
        20
    maplezzz  
       4 天前
    现在比较常用的字体体积优化方案是基于文字的 unicode-range 懒加载所用的字体分包
    subframe75361
        21
    subframe75361  
       4 天前
    字体的偏旁部首的间距坐标等信息并不是固定的,考虑美观因素甚至同一个部首在不同字体中都会有不一样的形状,完整地处理下来体积不会小多少
    xinyu391
        22
    xinyu391  
       3 天前
    笔画字体,不是什么新鲜概念。
    其实现在字体早就有这种技术了,字体中一个字符,可以有多个轮廓组成,就是为了重用相同的轮廓。
    但现在字体 主要是未来美观, 用偏旁部首 组合,很难达到美观的程度。
    shunia
        23
    shunia  
       3 天前
    @HADB #17 好细的技术方案,非常优秀。

    但是我感觉这也太浪费了。既然都使用预编译方案了,那无论多少标签,直接把它们都预编译成对应的,只包含该标签文字内容的字体文件就好了,html 里引用对应标签的字体文件,在前端就可以没有任何代价的实现常规样式。即便标签内容是动态的,捕获新标签触发字体编译应该也很简单。做一个这么复杂的技术方案,相对于结果,代价太高,大炮打蚊子。
    colourfulsai
        24
    colourfulsai  
       3 天前
    说实话,不如直接用 CDN 加速的字体,只要别的网页标签打开过,你的网页直接用,都不用下载,找一个使用率较高的就行。要不就像上面说的,子集化字体/惰性加载。
    tsx8
        25
    tsx8  
       3 天前
    @opengps 现在还是问题吧,个人博客加载自定义字体的速度还是很慢的
    opengps
        26
    opengps  
       3 天前
    @tsx8 #25 这确实,但非要用几兆的字体,还不如直接用几个 kb 的图片代替
    darkengine
        27
    darkengine  
       3 天前
    按字保存体积大,是空间换时间的思路。如果拆到笔画级别,你想想一篇文章要怎么保存,怎么渲染?
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   860 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:43 · PVG 06:43 · LAX 14:43 · JFK 17:43
    ♥ Do have faith in what you're doing.