小小的字體竟讓占這么多資源谚赎,不得不處理下
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⒐觥)
在線壓縮工具
- 字體壓縮神器 www.mainww.com
開源壓縮工具
4.壓縮過程記錄
- 工具選擇
我使用了開源工具fonttools
來實(shí)現(xiàn)壓縮踢械,選擇它也是因?yàn)榉奖慵傻轿业拇虬鞒汤锩妗?/li> - 字體格式
我的項(xiàng)目中使用的字體是HYZhengYuan-95W.ttf
和malgunbd.ttf
,均為ttf格式魄藕,無需進(jìn)行格式轉(zhuǎn)換
注: 1. WOFF/WOFF2格式文件更小内列,unity默認(rèn)是不支持的,想要使用需要自己擴(kuò)展背率。
? ????2. 使用 TextMesh Pro 的話话瞧,通過Font Asset Creator 窗口生成 TextMesh Pro 專用的字體資源。
- 字重和樣式豐富 →支持高級(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.txt
為Language_h.txt
和Language_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吹零!