【问题标题】:How to use fontTools to detect Type 1 and OpenType CFF fonts如何使用 fontTools 检测 Type 1 和 OpenType CFF 字体
【发布时间】:2019-09-21 19:35:37
【问题描述】:

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

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

【问题讨论】:

    标签: python-3.x fonts ttx-fonttools


    【解决方案1】:

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


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

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

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

    【讨论】:

    • 感谢您的详细回复!出于我的目的,检查 .sfntVersion 就足够了。
    猜你喜欢
    • 2022-09-25
    • 2012-02-05
    • 2013-08-23
    • 1970-01-01
    • 2010-11-15
    • 2012-11-10
    • 2012-07-10
    • 2017-04-25
    • 2011-01-06
    相关资源
    最近更新 更多