比較不同字形檔之間的缺字差異

看完這篇文章(或影片)你會學到:

  • 增加電腦字形一點點知識
  • 如何轉換ttf 為 ufo / ufo 轉為 ttf
  • 如何比對2個字型檔的缺字情況
  • 顯示文字對應到的unicode字碼

MaxCodeReview:
https://youtu.be/HSxRJ7_MyJQ


Max發現有一個好心人(游清松),花了很多時間去寫手寫字,並把字變成字型檔開放免費下載,我在過年期間隨手幫他弄了一個網頁:
https://jasonfonts.max-everyday.com/

原作者說,暫時他還沒有打算架網頁,如果未來有需要再找來請教我。

我發現有人在社團裡提出增字的要求:


Max 使用的Python程式碼轉換 ttf 為 ufo:

 import extractor
 import defcon
 ufo = defcon.Font()
 extractor.extractUFO("JasonFonts1.ttf", ufo)
 ufo.save("JasonFonts1.ufo", removeUnreferencedImages=True)
 ufo = defcon.Font()
 extractor.extractUFO("JasonFonts2.ttf", ufo)
 ufo.save("JasonFonts2.ufo", removeUnreferencedImages=True)
 ufo = defcon.Font()

Max 使用的Python程式碼比對缺字,並輸出比較結果到文字檔:

 def output_to_file(myfile, myfont_set):
     for item in myfont_set:
         output_string = "%s(%s)" % (chr(item),str(hex(item))[2:])
         myfile.write(output_string)
 import defcon
 ufo_font1 = defcon.Font(path="JasonFonts1.ufo")
 set_font1 = set()
 for glyph in ufo_font1:
     set_font1.add(glyph.unicode)
 ufo_font2 = defcon.Font(path="JasonFonts2.ufo")
 set_font2 = set()
 for glyph in ufo_font2:
     set_font2.add(glyph.unicode)
 print("start to compare…")
 print("1 have 2 without")
 filename_output = "diff_1_sub_2.txt"
 outfile = open(filename_output, 'w')
 diff_1_sub_2 = set_font1 - set_font2
 sorted_set=sorted(diff_1_sub_2)
 output_to_file(outfile,sorted_set)
 outfile.close()

最後貼上比較的結果:


附註:


相關文章:

Python 字型相關工具
https://stackoverflow.max-everyday.com/2020/02/python-font/

Font­Tools 安裝與使用簡明指南
https://stackoverflow.max-everyday.com/2020/02/fonttools/

FontForge
https://github.com/fontforge/fontforge/releases

Awesome Typography
https://github.com/Jolg42/awesome-typography

免費中文字體 NotoSans 思源黑體
https://max-everyday.com/2018/03/noto-font/

free and carefree: 可以免費商用的中文或漢字字型
https://tips.justfont.com/post/113397509827/freeandcarefreefonts

Facebook網友回應