前言
FontForge 是一支功能很強的字型處理程式,會接觸這支程式,主要是在學習由某些字型檔,取出部份字型,打造出一個 Web 開放字型 woff/woff2(Web Open Font Format),讓讀者在線上閱讀佛典時,可以在沒有安裝較新的 unicode 字型的情況下,也能看到這些字型,就是利用 Web 開放字型。
下載與安裝
FontForge 官網:https://fontforge.org/
下載後請依官網指示安裝及執行,重點提示:
- 在安裝程式按右鍵,選擇「以系統管理員身分執行」。
- 安裝後,開啟 FontForge 也是按右鍵,選擇「以系統管理員身分執行」,或是直接在捷徑按右鍵,選內容 -> 相容性,勾選「以系統管理員的身分執行此程式」。
如果要處理的字型很大,就需要 64 位元版的程式,可在這裡下載最新的版本:
https://sourceforge.net/projects/fontforgebuilds/files/x86_64/Portable/
不過作者有交待,64 位元不常更新,可能問題較多,請儘量少用。
界面基本操作
中文化
程式預設是安裝在此目錄
C:\Program Files (x86)\FontForgeBuilds
在此目錄下,找到 fontforge.bat 檔案,找到這一行
::set LANGUAGE=en
改成如下
set LANGUAGE=zh_TW
再儲存起來即可。如果無法儲存,可以先複製至其它目錄修改後,再想辦法用管理員權限覆蓋過去。
執行畫面
程式一執行,會要求開啟一個字型檔。在此以微軟正黑體為例:
選第一個之後,可以看到如下界面。
前往指定文字
在主功能表按下檢視 -> 前往
輸入文字
就可以到指定的文字了。
編修字型
文字連點二下,就可以進入編輯系統。
基本操作功能很好猜,可以區域選擇、複製、刪除,拉動定位點。
如此一來,就可以複製不同字的不同部件,用以組成一個新字了。
底下是測試在左邊複製一個點,並且加粗、移動,在文字上可以直接看到效果。測試時請不要儲存,以免破壞字型檔。
壓縮視圖
如果是內容不多的字型檔,可以在主功能表中選擇「編碼 -> Compact」
就可以看到只呈現有字型的文字。
上面是刻意設計的字型,位置是錯置的,可以看到 a 的位置呈現 b,這樣才能測試有沒有正確呈現指定的字型。
旋轉
這裡介紹一點基本功能。
先用右圖左上角的箭頭,選擇要旋轉的範圍,底下我是全選,再按下「旋轉所選」的功能,就可以拖動文字,旋轉到想要的角度。
同時也可以看到左圖的文字也同時旋轉了。
伸縮
可以上下左右伸縮。
翻轉
可以上下左右翻轉。
傾斜
可以左右傾斜。
3D 旋轉
翻到天邊去了
旋轉很大,要自己試才知道了。
産生字型
我想「儲存」是存成同樣格式,而「産生字型」就是可以産生其它格式的字型。
儲存成自己想要的格式,網路上多人建議,底下的「儲存之前進行驗證」不要勾選,不然會花不少時間。
OTF 要轉成 TTF 字型時,有一些注意事項,請見最底下「問題排解」之「OTF 轉 TTF 注意事項」。
由程式産生字型檔
這個程式的目的是要將 input.txt 之中的文字由 test.ttf 取出,另外放在 testFont.ttf(以及 .woff, woff2),woff2 壓縮較好,但 IE 只支援 woff 格式。
input.txt 格式是一字一行,底下是主要的程式。
d:/font/testfont.py
import fontforge
# 來源字型
origin_font = fontforge.open("d:/font/test.ttf")
# 新建字型
new_font = fontforge.font()
# 設定編碼為 ISO-10646-1 (Unicode, Full) *重要*
new_font.encoding = "UnicodeFull"
# 複製原字型的比例設定
new_font.ascent = origin_font.ascent
new_font.descent = origin_font.descent
new_font.em = origin_font.em
# 開啟文字清單
with open('d:/font/input.txt' ,'r', encoding='UTF-8') as fp:
for c in fp.readlines():
# 取得文字字碼 16進位
uc = ord(c.strip())
# copy對應字碼的字圖 paste至新字型裡
try:
origin_font.selection.select(uc)
origin_font.copy()
new_font.selection.select(uc)
new_font.paste()
except TypeError:
pass
# 設定新字型 metadata
filename = 'testFont'
new_font.fontname = filename
new_font.familyname = filename
new_font.weight = 'Regular'
new_font.copyright = ''
new_font.version = '1.0'
new_font.fullname = 'test font maker'
# 存檔 fontforge 軟體編輯用的 .sfd 檔案 以及 .ttf 檔案
new_font.save("d:/font/{}.sfd".format(filename))
new_font.generate("d:/font/{}.ttf".format(filename), flags='opentype')
new_font.generate("d:/font/{}.woff".format(filename))
new_font.generate("d:/font/{}.woff2".format(filename))
執行方法
- 系統管理員身分開啟 DOS 視窗。
- 切換到程式安裝目錄。
- 執行 fontforge -script d:/font/testfont.py
- 完成後就可以在目的目錄看到産生的字型檔了。
C:\>cd "Program Files (x86)\FontForgeBuilds"
C:\Program Files (x86)\FontForgeBuilds>fontforge -script d:/font/testfont.py
問題排解
這裡記錄一些遇到的問題與解決方法。
無法開啟大檔,請安裝 64 位元版
花園明朝體 HanaMinB.otf 是很大的檔案,有 30.7M,在測試的過程中,不論是使用界面開啟,或是用程式處理,都會發生閃退現象。
估計是檔案太大,記憶體不足,因此 Windows 系統要下載 64 位元版,下載點在此:
https://sourceforge.net/projects/fontforgebuilds/files/x86_64/Portable/
不過作者有交待,64 位元不常更新,可能問題較多,請儘量少用。
使用這個版本後,HanaMinB.otf 就可以順利開啟了。
無法用程式由 OTF 檔産生其它字型檔
在使用上面産生字型檔的程式中,如果來源檔是 OTF 的字型,就會有如下的錯誤訊息,原因不明。
File "d:/font/testfont.py", line 26, in <module>
origin_font.selection.select(uc)
ValueError: Encoding is out of range
解決方法就是先將 OTF 轉成 TTF,就可由 TTF 去産生 woff 等檔案了。
OTF 轉 TTF 注意事項
這是 OTF 要轉成 TTF 的過程。
按下 Generate,首先會看到底下這個畫面,我也不懂,就不理它了。
接著出現底下這個畫面,原本我也不理它,結果産生出來的 TTF 有問題,在 Windows 下無法直接開啟。
所以就依上面的教導,至主選單選「元件->字型資訊」
再選「一般」找到 Em 尺寸,這個 OTF 的 Em 是 1000,上面說 TrueType 的 Em-Size 應該是 2 的乘冪,所以我就改成 1024。
按下確定後,就會開始調整。調整完後,再次轉成 TTF,就沒有先前看到的警告,轉出來的 TTF 也可以順利用程式轉成 woff2 等格式了。
- 發表新回應
- 瀏覽次數:7766
回應
otf 轉 ttf 的部份,也可以直接用 script
otf 轉 ttf 的部份,也可以直接用 script 處理:
origin_font.generate("filename.ttf", flags='opentype')
就可以不用開啟GUI 囉
RE: otf 轉 ttf 的部份,也可以直接用 script
WB 說的也對,這部份應該也可以用 script 處理,謝謝提醒!
因為在實務上,産生 woff2 的機會較多,otf 轉 ttf 只要做一次,除非 otf 有新的版本。
所以可以寫成二支 script 來處理。
發表新回應