分割字型為多個檔案

通常字型分割是為了符合瀏覽器的需要, 瀏覽器支援的 .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/