0

我知道可以通过检查前 4 个字节的“OTTO”(0x4F54544F)来检测 Type 1 和 OpenType CFF(“PostScript 风格的 OpenType”)字体。

我将如何使用fontTools库在 Python 中执行此操作?即,我需要检查哪个字体表来检查这个值?

4

1 回答 1

1

版本存储在字体文件头中,而不是字体数据表中。如果您有一个ttLib.TTFont对象(即您使用 fontTools 打开了一个字体文件),您可以查看对象的.sfntVersion属性TTFont以获取版本(通常是0x00010000/Version 1 或0x4F54544F/OTTO,但还有其他可能的值, 见下文)。但是那种假设你已经TTFont通过打开一个字体文件创建了一个对象,所以这可能是一种先有鸡还是先有蛋的问题。如果您有兴趣在尝试打开文件/创建 a 之前了解版本TTFont,则必须在 fontTools 之外(至少)嗅探前四个字节。


注意:我对你的问题有点困惑。您提到 Type 1,它确实是一种 PostScript 字体,但不是(通常)在 OpenType/sfnt-housed 字体中的那种(即Type 2、“Compact Font Format”或 CFF)。据说有一种方法可以将 Type 1 存储在 OpenType/sfnt-housed 字体中;Apple 在他们的TrueType 参考手册中提到了这一点:

OS X 和 iOS 将值 'true' (0x74727565) 和 0x00010000 识别为引用 TrueType 字体。值 'typ1' (0x74797031) 被识别为是指位于 sfnt 包装器中的旧式 PostScript 字体。值 'OTTO' (0x4F54544F) 表示具有 PostScript 轮廓的 OpenType 字体(即,'CFF' 表而不是 'glyf' 表)。当前不支持其他值。

因此,如果typ1实际上是您要询问的内容,则可以0x74797031在文件的前四个字节中查找 /"typ1" 。但实际typ1的 sfnt 封装字体极为罕见——几乎不存在。绝大多数实际 Type 1 字体将位于 .PFA/.PFB 文件(对于非 Mac 平台)或“打印机字体”文件(OS X Mac 之前)中,这将与旧资源配对-fork 包含位图的“手提箱”文件。Type 1 字体文件将%!PS-AdobeFont-1作为文件的第一个字节。

于 2019-05-04T19:33:31.403 回答