Unity包體壓縮之——字體壓縮記錄


小小的字體竟讓占這么多資源谚赎,不得不處理下

1.字體為什么這么大媚狰?

字符集豐富:一些字體包含了多種語言的字符集岛杀,如 Unicode 全字符集,涵蓋了世界上幾乎所有的文字符號(hào)崭孤,這使得字體文件體積較大类嗤。
字形復(fù)雜:具有高度藝術(shù)設(shè)計(jì)性的字體,其字形可能包含大量的細(xì)節(jié)和裝飾元素裳瘪,如手寫體土浸、藝術(shù)字等罪针,這些復(fù)雜的字形需要更多的數(shù)據(jù)來描述彭羹,從而導(dǎo)致字體文件變大。
字體格式:TrueType 和 OpenType 格式較為常見泪酱,它們支持豐富的字體特性派殷,如字距調(diào)整、連字等墓阀,同時(shí)也會(huì)包含字體的元數(shù)據(jù)等信息毡惜,相對(duì)來說文件會(huì)大一些。PostScript 字體格式在打印領(lǐng)域應(yīng)用廣泛斯撮,它以輪廓線的方式描述字形经伙,對(duì)于復(fù)雜字形的描述可能會(huì)更詳細(xì),因此文件也可能較大
字重和樣式豐富:一些字體家族包含多種字重(如常規(guī)勿锅、粗體帕膜、半粗體等)和樣式(如斜體、下劃線等)溢十,每個(gè)字重和樣式都需要單獨(dú)的數(shù)據(jù)來存儲(chǔ)垮刹,這也會(huì)增加字體文件的大小。
支持高級(jí)排版功能:如果字體支持一些高級(jí)排版功能张弛,如 OpenType 特性中的智能標(biāo)點(diǎn)荒典、分?jǐn)?shù)形式等酪劫,也會(huì)使字體文件包含更多的信息,從而導(dǎo)致文件變大

2.壓縮準(zhǔn)備

從上面字體大的原因開始寺董,避免重復(fù)工作覆糟,我有以下壓縮順序考慮:
字體格式 →字重和樣式豐富 →支持高級(jí)排版功能→字符集豐富→字形復(fù)雜

3.如何壓縮

很好,上面已經(jīng)有了壓縮思路遮咖,現(xiàn)在開始查找壓縮工具(總不會(huì)想著直接修改源文件吧L鹿稹!6⒐觥)
在線壓縮工具

開源壓縮工具

4.壓縮過程記錄

  1. 工具選擇
    我使用了開源工具fonttools來實(shí)現(xiàn)壓縮踢械,選擇它也是因?yàn)榉奖慵傻轿业拇虬鞒汤锩妗?/li>
  2. 字體格式
    我的項(xiàng)目中使用的字體是HYZhengYuan-95W.ttfmalgunbd.ttf,均為ttf格式魄藕,無需進(jìn)行格式轉(zhuǎn)換

注: 1. WOFF/WOFF2格式文件更小内列,unity默認(rèn)是不支持的,想要使用需要自己擴(kuò)展背率。
? ????2. 使用 TextMesh Pro 的話话瞧,通過Font Asset Creator 窗口生成 TextMesh Pro 專用的字體資源。

  1. 字重和樣式豐富 →支持高級(jí)排版功能→字符集豐富
    針對(duì)(字重和樣式豐富 →支持高級(jí)排版功能)寝姿,工具已經(jīng)內(nèi)部處理了交排,黑盒操作就行,然后對(duì)于字符集饵筑,我們可以根據(jù)自己的項(xiàng)目來操作即可埃篓。
    列如:我項(xiàng)目中所使用的文本都在文件Language.txt中,包含 "en", "zh-Hans", "zh-Hant", "ru", "ko", "ja", "vi", "id"八種
  • 第一步根资,拆分Language.txtLanguage_h.txtLanguage_m.txt
    我的項(xiàng)目中malgunbd字體用于越南語和韓語架专,其他語言用HYZhengYuan-95W字體,所以先一步將字符集拆分玄帕。
  • 第二步部脚,使用字符集裁剪字體
fonttools subset "malgunbd.ttf" --text-file="Language_m.txt" --output-file="malgunbd_sub.ttf"
fonttools subset "HYZhengYuan-95W.ttf" --text-file="Language_h.txt" --output-file="HYZhengYuan-95W_sub.ttf"

4.HYZhengYuan-95W.ttf裁剪失敗

我在裁剪字體HYZhengYuan-95W.ttf時(shí),遇到了如下報(bào)錯(cuò)

PS C:\Users\heiyi\U3D\vim_sheep_tg\Client\Assets\Font> fonttools subset "HYZhengYuan-95W.ttf" --text-file="Language_h.txt" --output-file="HYZhengYuan-95W_sub.ttf"
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "C:\Users\heiyi\AppData\Local\Programs\Python\Python312\Scripts\fonttools.exe\__main__.py", line 7, in <module>
  File "C:\Users\heiyi\AppData\Local\Programs\Python\Python312\Lib\site-packages\fontTools\__main__.py", line 31, in main
    runpy.run_module(mod, run_name="__main__")
  File "<frozen runpy>", line 229, in run_module
  File "<frozen runpy>", line 88, in _run_code
  File "C:\Users\heiyi\AppData\Local\Programs\Python\Python312\Lib\site-packages\fontTools\subset\__main__.py", line 6, in <module>
    sys.exit(main())
             ^^^^^^
  File "C:\Users\heiyi\AppData\Local\Programs\Python\Python312\Lib\site-packages\fontTools\misc\loggingTools.py", line 375, in wrapper
    return func(*args, **kwds)
           ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\heiyi\AppData\Local\Programs\Python\Python312\Lib\site-packages\fontTools\subset\__init__.py", line 3813, in main
    subsetter.subset(font)
  File "C:\Users\heiyi\AppData\Local\Programs\Python\Python312\Lib\site-packages\fontTools\subset\__init__.py", line 3601, in subset
    self._prune_post_subset(font)
  File "C:\Users\heiyi\AppData\Local\Programs\Python\Python312\Lib\site-packages\fontTools\subset\__init__.py", line 3584, in _prune_post_subset
    retain = table.prune_post_subset(font, self.options)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\heiyi\AppData\Local\Programs\Python\Python312\Lib\site-packages\fontTools\subset\__init__.py", line 2865, in prune_post_subset
    v.trim(remove_hinting=remove_hinting)
  File "C:\Users\heiyi\AppData\Local\Programs\Python\Python312\Lib\site-packages\fontTools\ttLib\tables\_g_l_y_f.py", line 1395, in trim
    flag = data[i]
           ~~~~^^^
IndexError: bytearray index out of range

這個(gè)字體我之前修改過行間距裤纹,導(dǎo)致工具fonttools識(shí)別時(shí)報(bào)錯(cuò)委刘,所以需要先修復(fù)

  • 使用fonttools本身提供的TTX工具,可以將字體文件轉(zhuǎn)換為 XML 格式
ttx HYZhengYuan-95W.ttf
  • 然后再轉(zhuǎn)換回來
 ttx -o HYZhengYuan-95W.ttf HYZhengYuan-95W.ttx
  • 最后重新執(zhí)行裁剪鹰椒,大功告成
fonttools subset "HYZhengYuan-95W.ttf" --text-file="Language_h.txt" --output-file="HYZhengYuan-95W_sub.ttf"

5.結(jié)果展示


從開始的16.52MB到現(xiàn)在的235.62KB锡移,結(jié)果壓縮了98.607%,amazing吹零!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末罩抗,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子灿椅,更是在濱河造成了極大的恐慌套蒂,老刑警劉巖钞支,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異操刀,居然都是意外死亡烁挟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門骨坑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撼嗓,“玉大人,你說我怎么就攤上這事欢唾∏揖” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵礁遣,是天一觀的道長斑芜。 經(jīng)常有香客問我,道長祟霍,這世上最難降的妖魔是什么杏头? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮沸呐,結(jié)果婚禮上醇王,老公的妹妹穿的比我還像新娘。我一直安慰自己崭添,他們只是感情好寓娩,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著滥朱,像睡著了一般根暑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上徙邻,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音畸裳,去河邊找鬼缰犁。 笑死,一個(gè)胖子當(dāng)著我的面吹牛怖糊,可吹牛的內(nèi)容都是我干的帅容。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼伍伤,長吁一口氣:“原來是場噩夢啊……” “哼并徘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起扰魂,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤麦乞,失蹤者是張志新(化名)和其女友劉穎蕴茴,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體姐直,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡倦淀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了声畏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撞叽。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖插龄,靈堂內(nèi)的尸體忽然破棺而出愿棋,到底是詐尸還是另有隱情,我是刑警寧澤均牢,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布初斑,位于F島的核電站,受9級(jí)特大地震影響膨处,放射性物質(zhì)發(fā)生泄漏见秤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一真椿、第九天 我趴在偏房一處隱蔽的房頂上張望鹃答。 院中可真熱鬧,春花似錦突硝、人聲如沸测摔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锋八。三九已至,卻和暖如春护盈,著一層夾襖步出監(jiān)牢的瞬間挟纱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來泰國打工腐宋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留紊服,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓胸竞,卻偏偏與公主長得像欺嗤,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子卫枝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容