其實我對這個實驗的結果並不是特別滿意,但我還是想分享一下,因為擺弄字體是件非常簡單和有趣的事情。而且有人問我怎麼做,我告訴她我會寫一篇博文來介紹一下 :smiley:
背景:原本的手寫體
先交代一些背景信息:我有一個我自己的手寫字體,我已經在我的電子雜誌中使用了好幾年了。我用一個叫 iFontMaker 的令人愉快的應用程式製作了它。他們在網站上自詡為「你可以在 5 分鐘內只用手指就能製作出你的手工字體」。根據我的經驗,「5 分鐘」的部分比較準確 —— 我可能花了更多的時間,比如 15 分鐘。我對「只用手指」的說法持懷疑態度 —— 我用的是 Apple Pencil,它的精確度要好得多。但是,使用該應用程式製作你的筆跡的 TTF 字體是非常容易的,如果你碰巧已經有了 Apple Pencil 和 iPad,我認為這是一個有趣的方式,我只花了 7.99 美元。
下面是我的字體的樣子。左邊的「CONNECT」文字是我的實際筆跡,右邊的段落是字體。其實有 2 種字體 —— 有一種是普通字體,一種是手寫的「等寬」字體。(其實實際並不是等寬,我還沒有想好如何在 iFontMaker 中製作一個實際的等寬字體)
目標:在字體上做更多的字符變化
在上面的截圖中,很明顯可以看出這是一種字體,而不是實際的筆跡。當你有兩個相同的字母相鄰時,就最容易看出來,比如「HTTP」。
所以我想,使用一些 OpenType 的功能,以某種方式為這個字體引入更多的變化,比如也許兩個 「T」 可以是不同的。不過我不知道該怎麼做!
來自 Tristan Hume 的主意:使用 OpenType!
然後我在 5 月份的 !!Con 2020 上(所有的演講錄音都在這裡!)看到了 Tristan Hume 的這個演講:關於使用 OpenType 通過特殊的字體將逗號插入到大的數字中。他的演講和博文都很棒,所以這裡有一堆連結 —— 下面現場演示也許是最快看到他的成果的方式。
基本思路:OpenType 允許你根據上下文替換字符
我一開始對 OpenType 到底是什麼非常困惑。目前我仍然不甚瞭然,但我知道到你可以編寫極其簡單的 OpenType 規則來改變字體的外觀,而且你甚至不需要真正了解字體。
下面是一個規則示例:
這裡 sub a' b by other_a; 的意思是:如果一個 a 字形是在一個 b 之前,那麼替換 a 為字形 other_a。
所以這意味著我可以讓 ab 和 ac 在字體中出現不同的字形。這並不像手寫體那樣隨機,但它確實引入了一點變化。
OpenType 參考文檔:真棒
我找到的最好的 OpenType 文檔是這個 OpenType™ 特性文件規範 資料。裡面有很多你可以做的很酷的事情的例子,比如用一個連字替換 「ffi」。
如何應用這些規則:fonttools
為字體添加新的 OpenType 規則是超容易的。有一個 Python 庫叫 fonttools,這 5 行代碼會把放在 rules.fea 中的 OpenType 規則列表應用到字體文件 input.ttf 中。
from fontTools.ttLib import TTFontfrom fontTools.feaLib.builder import addOpenTypeFeaturesft_font = TTFont('input.ttf')addOpenTypeFeatures(ft_font, 'rules.fea', tables=['GSUB'])ft_font.save('output.ttf')
fontTools 還提供了幾個名為 ttx 和 fonttools 的命令行工具。ttx 可以將 TTF 字體轉換為 XML 文件,這對我很有用,因為我想重新命名我的字體中的一些字形,但我對字體一無所知。所以我只是將我的字體轉換為 XML 文件,使用 sed 重命名字形,然後再次使用 ttx 將 XML 文件轉換回 ttf。
fonttools merge 可以讓我把我的 3 個手寫字體合併成 1 個,這樣我就在 1 個文件中得到了我需要的所有字形。
代碼
我把我的極潦草的代碼放在一個叫 font-mixer 的存儲庫裡。它大概有 33 行代碼,我認為它不言自明。(都在 run.sh 和 combine.py 中)
結果
下面是舊字體和新字體的小樣。我不認為新字體的「感覺」更像手寫體 —— 有更多的變化,但還是比不上實際的手寫體文字(在下面)。
我覺得稍微有點不可思議,它明明還是一種字體,但它卻要假裝成不是字體:
而這是實際手寫的同樣的文字的樣本:
如果我在製作另外 2 種手寫字體的時候,把原來的字體混合在一起,再仔細一點,可能效果會更好。
添加 OpenType 規則這麼容易,真酷!
這裡最讓我欣喜的是,添加 OpenType 規則來改變字體的工作方式是如此的容易,比如你可以很容易地做出一個「the」單詞總是被「teh」代替的字體(讓錯別字一直留著!)。
不過我還是不知道如何做出更逼真的手寫字體:)。我現在還在用舊的那個字體(沒有額外的變化),我對它很滿意。
via: https://jvns.ca/blog/2020/08/08/handwritten-font/
作者:Julia Evans 選題:lujun9972 譯者:wxy 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出