【问题标题】:How to convert .otf to .ttf (with Postscript outlines) using Fontforge scripting? [closed]如何使用 Fontforge 脚本将 .otf 转换为 .ttf(带有 Postscript 大纲)? [关闭]
【发布时间】:2015-09-26 10:34:45
【问题描述】:

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

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

如果有人能给我一些指示,我将不胜感激。

【问题讨论】:

  • 请参阅我的回答,了解为什么您不能做您所要求的事情(因为您对 OpenType 的了解不完整),所以作为建设性问题:您为什么认为您需要这样做?您试图解决哪个问题让您认为需要转换字体?因为you should be asking how to solve that problem,没有怎么实现转换。

标签: fonts fontforge


【解决方案1】:

OpenType 如何工作的快速课程:OpenType 有两种风格:OpenType-with-CFF-Data 和 OpenType-with-Truetype-Outlines

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

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

    2018 年编辑: 现在还有两种类型:OpenType-with-SVG-Outlines,它与“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 字体”。但是,需要意识到的重要一点是,扩展程序并没有以任何方式定义字体。只有它的内容。我们可以将字体重命名为具有.gif 扩展名,它仍然是内容指定的那种字体。因此,对于字体引擎,扩展名一点也不重要,就像图像预览器会愉快地打开 .jpg 文件一样,即使它具有 .png 扩展名。

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

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

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

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

【讨论】:

  • 感谢您的回答,迈克。我必须承认我对字体格式的工作方式有点困惑。目前正在开发一个 webfont 生成器,我设法使用 Fontforge 将 .OTF 转换为 .TTF,并使用 ttautohint 改进了提示。但是我对可能会生成带有后记大纲的“假”.TTF 的 Fontsquirrel 生成器感到困惑。 (“专家模式”,“Truetype 提示”为“保持现有”)您的回答让我明白,该文件并未真正转换为 .TTF 格式,而只是一个“重新标记”为“假”.TTF 的 .OTF 文件.所以谢谢你的帮助。顺便说一句,也感谢您的 PHP-Font-Parser
  • 还有一种非常简单的方法可以查看字体是否“撒谎”它的扩展名:在文本编辑器、字节查看器或任何可以将字体加载为“字节”的工具中打开文件,然后检查文件中的前四个字节是否读取OTTO。如part of the OpenType specification,OT-TTF 使用 [00,01,00,00] 作为版本指示符,看起来像“.”,而 OT-CFF 使用字节 [47,54,54,47],实际上是字母“OTTO”,所以如果你看到:那个扩展名应该是otf而不是ttf(当然是松散意义上的“应该”)
  • 作为次要建议:仅使用 fontsquirrel 来形成 WOFF。原因是 everything simply supports WOFF 所以我们不需要任何其他格式。 WOFF 是任何otfttf 字体的无损包装器,因此您无需触及字体本身,您只需压缩字体内的每个表格,以便在网络上使用,并且由于一切都支持它,我们不需要我们 1~2 年前需要的 otfttfeotsvg 的东西。
猜你喜欢
  • 2012-03-08
  • 2014-08-23
  • 2011-08-08
  • 2010-12-31
  • 2012-01-28
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
  • 2015-05-05
相关资源
最近更新 更多