如何使用 Fontforge 脚本将 .otf 转换为 .ttf(带有 Postscript 大纲)?

How to convert .otf to .ttf (with Postscript outlines) using Fontforge scripting?

我正在尝试使用 Fontforge 脚本将 .otf 字体转换为 .ttf 字体(带有 Postscript 轮廓)。

默认选项转换为具有 Truetype 轮廓的 .ttf。

如果有人能指点一下,我将不胜感激。

快速了解 OpenType 的工作原理:OpenType 有两种风格:OpenType-with-CFF-Data 和 OpenType-with-Truetype-Outlines

  1. 带有 CFF 块的 OpenType 字体使用 Type2“charstring”轮廓定义,允许三次曲线建模。它们类似于 Postscript,但在技术上不是 Postscript。由于历史原因,人们一直这么称呼它。

  2. 带有 TrueType 表格的 OpenType 字体使用 TrueType 轮廓定义,仅允许二次曲线建模。

    (2018 edit: 现在还有两种类型:OpenType-with-SVG-Outlines,not 与“一种 SVG 字体”,以及 OpenType-with-CFF2-Outlines,这是对 CFF 的彻底改造,专门用于 OpenType 而不是作为嵌入不可知的大纲语言)

这两个轮廓模型是相互排斥的,所以你可以选择一个你喜欢的,但不能同时选择两个。

现在,按照惯例,CFF-OT(和 CFF2-OT)字体使用 .otf 扩展名,而 TTF-OT(和 SVG-OT)使用 .ttf 扩展名,但是它们'两者都只是 OpenType 字体,仅在 CFF/TFF(/CFF2/SVG) 数据块中有所不同。因此,当我们谈论 otf 字体时,我们真正指的是“Postscript opentype 字体”(这是用词不当,因为 CFF 使用 Type2 语言,而不是 PostScript 语言),而当我们谈论 ttf 字体时,我们真正的意思是“TrueType opentype 字体”。但是,需要认识到的重要一点是,扩展不会以任何方式 define 字体;只有它的内容。我们可以重命名字体以具有 .gif 扩展名,它仍然是内容指定的字体类型。因此,对于字体引擎,扩展名一点也不重要,就像图像预览器会愉快地打开 .jpg 文件一样,即使它具有 .png 扩展名。

询问如何将 otf,按照惯例是“postscript”字体(但同样,不是真的,它是 Type2)变成 ttf,按照惯例是“truetype”字体,因此不能包含“postscript”(但仍然是真正的 Type2),加上 ttf 应该包含“postscript outlines”的附加要求,这没有任何意义:这就像问如何转换软将铅笔变成硬铅笔,但使用软铅笔:你已经完成了,你问的是如何创建你开始的东西。

带有“postscript”轮廓的 Opentype 字体是 otf

当然,您可以将 CFF 字体转换为 TrueType 字体,但这是一种有损转换:完美转换三次贝塞尔曲线(用于 Type2)在数学上是不可能的到二次贝塞尔曲线(在 TrueType 中使用),所以你最终会得到一种近似于原始字体的字体。

所以我的建议是:不要打扰。任何支持 OpenType 字体的引擎都支持 CFF 和 TrueType,并且转换为 .ttf 不会做任何有意义的事情,同时要么放大字体大小(为了感知上的完美转换)要么由于有损轮廓而使字体相对于原始字体不正确转换。