Python字體

使用程式協助字體補字

為什麼要學這個?

原本純手工在做的事情,改用程式來幫忙,減少自行比對既有文字元件的時間。自動補出來的字,大多都很醜,而且不太平衡,在自動配對補字時,預設會產生一個 compose.log 的檔案,這個檔案的參考價值就比較高,會列出自動去配對的過程,這時手動去挑選適合大小的部件,就比較容易配對出平衡的新字。

除此之外,也可以使用 AI 去學習,對於在創作一個新字時,每個部件的位置及大小的微調,參考性佳!


使用限制

自動補字的限制很多。

  • 目前版本的程式無法處理筆畫相連的字,當然組合出來的字,也會因為無法筆畫相連,而造成中宮偏鬆。
  • 部件大小和位置的問題,以部首來來,筆畫較多時,部首會較小,筆畫較少時,部首會較大,目前版本的程式對這部份還沒有處理。

前置準備

使用前,需要先安裝FontForge,把要處理的字體先存成.sfdir 的資料夾格式。

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

Max腳本檔案,使用程式協助補字程式下載:
https://github.com/max32002/MaxFontScripts/blob/master/auto_compose_glyph.py

簡易中文字典檔案下載:
https://github.com/max32002/chinese_dictionary
附註:我們使用的是 Dictionary_lite.json 簡易版的字典檔


使用方法

把 source.ttf 轉換為 target.sfdir

auto_compose_glyph.py
--input source.sfdir
--output new.sfdir
--file glyphs_list.txt

主要使用這3個參數即可。

組字過程的記錄,放在 compose.log 檔案裡。

要微調組合參數,可以使在 glyphs_list.txt 檔案裡設定,glyphs_list.txt 每一個單字的分隔符號是 Enter, 參數微調分隔符號是空白。

上面的執行結果,預設會使用FontForge 去預覽組字結果的 new.sfdir,可以先把組字失敗的刪除後,再把調整完的放回去要處理的來源目錄。


進階的參數

  • –shake=False
    可以讓部件固定從筆畫少的先取得,預設是 shake=True
  • –add_extra_finetune_commands
    這個參數,可以微調部件出現的位置,預設是不啟用,套用了的效果會讓較大的部件被縮小,相對較容易失真,還有筆頭的寬度也會變的不太一致。

使用範例

auto_compose_glyph.py --input jason4.sfdir --output new.sfdir --file chars_4K_ROW.txt --dictionary_file ~/Documents/zi_parser/Dictionary_lite.json

說明:

  • 要處理的FontForge 專案是 jason4.sfdir,
  • 輸出結果的資料夾為:new.sfdir,
  • 補字清單從chars_4K_ROW.txt
  • 指定字典檔放在 ~/Documents/zi_parser/Dictionary_lite.json, 每次都要打這個path 的參數,很花時間,建議暫時 copy 一份 json 檔案到現行目錄下,或是使用 symbol link 產生連結檔,會方便些。

Q:補字清單,要如何取得?
A:先使用一個較完整的字型檔,例如市面上常見的6千字免費字型,透過「取得字體的包含文字」即可取得文字清單。或使用台灣教育部的 moeli 3.0 ,裡面有 4808 常用中文字。

Q:補字清單,檔案內容的格式為何?
A:整理一下上面的文字清單,去除中文字的部份,即可直接使用。


MaxCodeReview 影片:
(製作中)


相關文章:

查「部首」、「筆畫」、「異體字」、「同義字」和「文字組件」的字典
https://max-everyday.com/2020/04/chinese-dictionary-radical/

AI造字經驗分享
https://max-everyday.com/2021/07/zi2zi-ai-font/

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *