Linux中國

一次讓字體看起來更像手寫體的嘗試

其實我對這個實驗的結果並不是特別滿意,但我還是想分享一下,因為擺弄字體是件非常簡單和有趣的事情。而且有人問我怎麼做,我告訴她我會寫一篇博文來介紹一下 :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;

這裡 sub a' b by other_a; 的意思是:如果一個 a 字形是在一個 b 之前,那麼替換 a 為字形 other_a

所以這意味著我可以讓 abac 在字體中出現不同的字形。這並不像手寫體那樣隨機,但它確實引入了一點變化。

OpenType 參考文檔:真棒

我找到的最好的 OpenType 文檔是這個 OpenType™ 特性文件規範 資料。裡面有很多你可以做的很酷的事情的例子,比如用一個連字替換 「ffi」。

如何應用這些規則:fonttools

為字體添加新的 OpenType 規則是超容易的。有一個 Python 庫叫 fonttools,這 5 行代碼會把放在 rules.fea 中的 OpenType 規則列表應用到字體文件 input.ttf 中。

from fontTools.ttLib import TTFont
from fontTools.feaLib.builder import addOpenTypeFeatures

ft_font = TTFont('input.ttf')
addOpenTypeFeatures(ft_font, 'rules.fea', tables=['GSUB'])
ft_font.save('output.ttf')

fontTools 還提供了幾個名為 ttxfonttools 的命令行工具。ttx 可以將 TTF 字體轉換為 XML 文件,這對我很有用,因為我想重新命名我的字體中的一些字形,但我對字體一無所知。所以我只是將我的字體轉換為 XML 文件,使用 sed 重命名字形,然後再次使用 ttx 將 XML 文件轉換回 ttf

fonttools merge 可以讓我把我的 3 個手寫字體合併成 1 個,這樣我就在 1 個文件中得到了我需要的所有字形。

代碼

我把我的極潦草的代碼放在一個叫 font-mixer 的存儲庫里。它大概有 33 行代碼,我認為它不言自明。(都在 run.shcombine.py 中)

結果

下面是舊字體和新字體的小樣。我不認為新字體的「感覺」更像手寫體 —— 有更多的變化,但還是比不上實際的手寫體文字(在下面)。

我覺得稍微有點不可思議,它明明還是一種字體,但它卻要假裝成不是字體:

而這是實際手寫的同樣的文字的樣本:

如果我在製作另外 2 種手寫字體的時候,把原來的字體混合在一起,再仔細一點,可能效果會更好。

添加 OpenType 規則這麼容易,真酷!

這裡最讓我欣喜的是,添加 OpenType 規則來改變字體的工作方式是如此的容易,比如你可以很容易地做出一個「the」單詞總是被「teh」代替的字體(讓錯別字一直留著!)。

不過我還是不知道如何做出更逼真的手寫字體:)。我現在還在用舊的那個字體(沒有額外的變化),我對它很滿意。

via: https://jvns.ca/blog/2020/08/08/handwritten-font/

作者:Julia Evans 選題:lujun9972 譯者:wxy 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國