向量檔匯入字體檔

為什麼要學這個?

比起在FontForge 手動操作,改用指令自動完成,更有效率。


前置作業

使用前,需要先安裝FontForge。

FontForge執行檔下載:
https://fontforge.org/en-US/

Max腳本檔案下載:
https://github.com/max32002/MaxFontScripts/blob/master/import_svg.py


使用方法

fontforge import_svg.py --input your-project.sfdir --output your-new-font.ttf --svg_path . 

參數說明:

  • input: Font Forge 的 .sfdir 資料夾路徑, 或是字型的檔案, 建議使用 .ttf 當作輸入, 效率會快很多. 但是, 如果遇到一直匯入失敗的情況, 建議改用 .sfdir 的輸入格式.
  • output: save a new font forge project name, 預設值是空的, 不輸入即可直接更新到 input font forge project.建議使用 .ttf 當作輸入, 效率會快很多.
  • filename_pattern: 檔名的規則, 應該是沒什麼好修改的, 用預設值即可.
  • filename_source: 在檔名規則裡的變數來源,預設值是 char 。這個參數只接受4個值:[‘char’, ‘unicode_hex’, ‘unicode_int’],分別是字元,unicode 16進位值,unicode 10進位值. 使用 char 是很方便, 但問題是相容性不好, 也容易出錯, 尤其是擴充字元的部份, 很多作業系統不充許檔名使用, 預設值是使用 unicode_int.

說明, 由於需要使用到 font forge library, 所以要透過 font forge 執行這一個 python script.

在操作大型的字型檔時, 往往需要很高的記憶體, 一但記憶體不足, 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/


錯誤排除

執行指令:

fontforge import_svg.py --input OldMaruko2CJKjp-Regular.ttf --output OldMaruko3CJKjp-Regular.ttf --svg_path my-svg-folder --begin 8000 --end 9000

回傳錯誤:

Open font: OldMaruko2CJKjp-Regular.ttf
Save dir: OldMaruko3CJKjp-Regular.ttf
Svg path: my-svg-folder
Filename pattern: %s.svg
Filename source: unicode_int

Source font total glyph: 44922
Processing glyph: 8000
Processing glyph: 9000
Imported count: 1001
Attempt to output -43598 into a 16-bit field. It will be truncated and the file may not be useful.

說明, 使用輸入 .ttf 載入速度快, 改成 .sfdir 為輸入格式, 除了載入字型的輸入變極慢之外, 結果匯入 svg 之後, 還是一樣出錯, 這似乎可能是字型檔案出錯.

要知道是字型檔案出錯, 只要使用另存字型檔的功能, 就可以知道字型檔是不是壞掉, 參考:
https://codereview.max-everyday.com/font-to-fontforge/

fontforge 上的討論:
Lookup removal related “Attempt to output n into a 16-bit field.” failure
https://github.com/fontforge/fontforge/issues/5228

如果是匯入的svg 造成字型檔損壞, 只要調整匯入的範圍即可知道.

解法是讓來源的字型檔變正常, 參考看看:
https://stackoverflow.max-everyday.com/2022/09/fontforge-font-pros-settings-wrong/

結論:

  • 使用 .sfdir 或 .ttf 在匯入的時候, 都要先直接用另存 .ttf 的功能來測試輸入用的字型專案或.ttf 檔是否能正常存檔.
  • 雖然上面有錯誤訊息, 但實際上字型檔一切功能都正常, 只是 warning 訊息, “may not be useful” 是可以能會發生, 實際上很高機率還可以繼續使用.

簡化 svg 檔


相關文章