通常字型分割是為了符合瀏覽器的需要, 瀏覽器支援的 .ttf 或 web font 格式必需小於等於30MB.
大型的字型檔在 fontforge 是很脆弱的, 動不動就會讓 fontforge crash, 與其重覆操作很多次, 不如切割內容, 最後處理完成, 再進行合併.
前置作業
使用前,需要先安裝FontForge
FontForge執行檔下載:
https://fontforge.org/en-US/
Max腳本檔案下載:
https://github.com/max32002/MaxFontScripts/blob/master/split_font.py
使用方法
fontforge split_font.py --input your-font
參數說明:
- input: fontforge 專案目錄, 或是字型檔, 應該大家都會用字型檔, 比較有效率.
- max_glyphs: 每個檔案的 glyphs 上限, 預設 15000, 實際測試改用 10000, 效果顯著.
- font_ext: 預設輸出 .ttf, 想轉成 webfont 可以使用 .woff2
說明:
- 由於需要使用到 font forge library, 所以要透過 font forge 執行這一個 python script.
- 這個切割方式, 還有很多問題, 例如會造成:
- lookups 失敗
- No glyph with unicode U+0???? in font
- GID out of range (65535) in format 14 ‘cmap’ subtable
- 切成多個小檔案的優點就是, 比較不會遇到記憶體相關的議題, 例如:
- internal buffer error : Memory allocation failed : growing buffer
- I/O error : Memory allocation failed : growing input buffer
- parser error : Memory allocation failed
- 在操作大型的字型檔時, 往往需要很高的記憶體, 一但記憶體不足, fontforge 就會crash. Window 平台上新的版本的 fontforge 是 32 位元版本, 因為 macOS / Linux 長期都是 64位元, 反而在 macOS / Linux 可以順利地直接處理大型的字型檔.
- 實際測試在 Windows 32位元版本, 當程式內部使用的記憶體超過 2.1GB 的 RAM, fontforge 程式就會閃退 crash, 針對會需要處理大型的字型檔, 請改安裝 64位元版本, fontforge x64下載用傳送門:
https://sourceforge.net/projects/fontforgebuilds/files/x86_64/Portable/