尝试使字体看起来更像手写字体

2020-08-09 12:17:59

实际上,我对这个实验的结果并不是非常满意,但我还是想和大家分享一下,因为玩字体很容易,也很有趣。有人问我怎么做,我告诉她我会为此写一篇博客文章:)。

一些背景知识:我有一种手写字体,几年来我一直在用这种字体。我是用一款叫iFontMaker的令人愉快的应用程序做的。他们在自己的网站上将自己标榜为“你可以用手指在不到5分钟的时间内制作出你的手工字体”。根据我的经验,“5分钟”部分相当准确--我可能花了更多的时间,比如15分钟。我对“只要你的手指”的说法持怀疑态度--我用的是苹果铅笔,它的精确度要高得多。但是用这款应用把你的笔迹做成TTF字体是非常容易的,如果你碰巧已经有了苹果铅笔和Pad,我认为花7.99美元是一个有趣的方式。

这是我的字体的样子。左边的“连接”文本是我的真实手写,右边的段落是字体。实际上有2种字体--有一种常规字体和一种手写的“等宽”字体。(实际上不是等宽字体,我还没有想好如何在iFontMaker中制作真正的等宽字体)。

在上面的截图中,很明显这是一种字体,而不是真正的笔迹。当你有两个相邻的相同字母时,最容易看到这一点,比如“HTTP”。

所以我想使用一些OpenType特性在这种字体中引入更多的变体可能会很有趣,比如这两种字体可能会有所不同。不过,我不知道该怎么做!

然后我在5月份参加了!!CON 2020(所有的演讲录音都在这里!)。我看过TristanHume关于使用OpenType通过一种特殊的字体来放置大量逗号的演讲。他的演讲和博客文章都很棒,所以这里有一些链接-livedemo可能是查看他的结果的最快方式。

一开始,我对OpenType到底是什么感到非常困惑。我知道的还不是很多,但是我了解到你可以编写非常简单的OpenType规则来改变字体的外观,而且你甚至不需要真正理解任何关于字体的东西。

Suba';b by Other_a;的意思是:如果a字形在b之前,则用字形Other_a替换a。

这意味着我可以让ab在字体上看起来不同于ac。这不是手写的随意性,但它确实引入了一点变化。

我找到的关于OpenType的最好的文档是OpenTypeWebFeature File Specification Reference(OpenType™功能文件规范参考)。你可以在那里做很多很酷的事情,比如用绑带代替“ffi”。

向字体添加新的OpenType规则非常容易。有一个名为fonttools的Python库,这5行代码将把OpenTyperules列表(在rules.fea中)应用到字体文件input.ttf。

FontTools还提供了几个称为ttx和fonttools的命令行工具。TTX将TTF字体转换为XML文件,这对我很有用,因为我想重命名字体中的一些字形,但对字体一无所知。因此,我只是将字体转换为XML文件,使用sed重命名字形,然后再次使用ttx将XML文件转换回TTF。

字体工具合并让我将我的3个手写字体合并成1个,这样我就可以在1个文件中拥有我需要的所有字形。

我将完成此操作的极其繁琐的代码放在一个名为font-Mixer的存储库中。它有33行代码,我认为非常简单。(都在run.sh和comine.py中)。

这里有一个小样本,旧字体和新字体。我不认为新的字体“感觉”更像手写--有更多的变化,但它仍然不能与实际的手写文本相比(在底部)。

对我来说,它感觉有点诡异的山谷,就像它显然还在继续,但它在假装成另一个东西。

如果我在制作另外两种混合了原始字体的手写字体时更加小心,效果可能会更好。

这里最让我高兴的是,添加OpenTyperules来改变字体的工作方式是如此容易,就像你可以非常容易地制作一种字体,其中单词“the”总是被“teh”替换(总是输入错误!)。

不过,我仍然不知道如何制作更逼真的手写字体:)我仍然在使用旧的(没有额外的变体),我对它相当满意。