产业气象站|| Linux 中国,一次让字体看起来更像手写体的尝试


产业气象站|| Linux 中国,一次让字体看起来更像手写体的尝试
文章图片
导读:其实我对这个实验的结果并不是特别满意 , 但我还是想分享一下 , 因为摆弄字体是件非常简单和有趣的事情 。
本文字数:2970 , 阅读时长大约:4分钟
https://linux.cn/article-12545-1.html作者:JuliaEvans译者:Xingyu.Wang
其实我对这个实验的结果并不是特别满意 , 但我还是想分享一下 , 因为摆弄字体是件非常简单和有趣的事情 。 而且有人问我怎么做 , 我告诉她我会写一篇博文来介绍一下:smiley:
背景:原本的手写体
先交代一些背景信息:我有一个我自己的手写字体 , 我已经在我的电子杂志中使用了好几年了 。 我用一个叫的令人愉快的应用程序制作了它 。 他们在网站上自诩为“你可以在5分钟内只用手指就能制作出你的手工字体” 。 根据我的经验 , “5分钟”的部分比较准确——我可能花了更多的时间 , 比如15分钟 。 我对“只用手指”的说法持怀疑态度——我用的是ApplePencil , 它的精确度要好得多 。 但是 , 使用该应用程序制作你的笔迹的TTF字体是非常容易的 , 如果你碰巧已经有了ApplePencil和iPad , 我认为这是一个有趣的方式 , 我只花了7.99美元 。
【产业气象站|| Linux 中国,一次让字体看起来更像手写体的尝试】下面是我的字体的样子 。 左边的“CONNECT”文字是我的实际笔迹 , 右边的段落是字体 。 其实有2种字体——有一种是普通字体 , 一种是手写的“等宽”字体 。 (其实实际并不是等宽 , 我还没有想好如何在iFontMaker中制作一个实际的等宽字体)
产业气象站|| Linux 中国,一次让字体看起来更像手写体的尝试
文章图片
目标:在字体上做更多的字符变化
在上面的截图中 , 很明显可以看出这是一种字体 , 而不是实际的笔迹 。 当你有两个相同的字母相邻时 , 就最容易看出来 , 比如“HTTP” 。
所以我想 , 使用一些OpenType的功能 , 以某种方式为这个字体引入更多的变化 , 比如也许两个“T”可以是不同的 。 不过我不知道该怎么做!
来自TristanHume的主意:使用OpenType!
然后我在5月份的!!Con2020上(所有的)看到了TristanHume的这个演讲:关于使用OpenType通过特殊的字体将逗号插入到大的数字中 。 他的演讲和博文都很棒 , 所以这里有一堆链接——下面现场演示也许是最快看到他的成果的方式 。
一个现场演示:
博客文章:
谈话:
GitHub存储库:
基本思路:OpenType允许你根据上下文替换字符
我一开始对OpenType到底是什么非常困惑 。 目前我仍然不甚了然 , 但我知道到你可以编写极其简单的OpenType规则来改变字体的外观 , 而且你甚至不需要真正了解字体 。
下面是一个规则示例:
suba"bbyother_a
这里suba"bbyother_a的意思是:如果一个a字形是在一个b之前 , 那么替换a为字形other_a 。
所以这意味着我可以让ab和ac在字体中出现不同的字形 。 这并不像手写体那样随机 , 但它确实引入了一点变化 。
OpenType参考文档:真棒
我找到的最好的OpenType文档是这个资料 。 里面有很多你可以做的很酷的事情的例子 , 比如用一个连字替换“ffi” 。
如何应用这些规则:fonttools
为字体添加新的OpenType规则是超容易的 。 有一个Python库叫fonttools , 这5行代码会把放在rules.fea中的OpenType规则列表应用到字体文件input.ttf中 。
fromfontTools.ttLibimportTTFont
fromfontTools.feaLib.builderimportaddOpenTypeFeatures
ft_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 。