我知道可以通过检查“ OTTO”(0x4F54544F)的前4个字节来检测Type 1和OpenType CFF(“ PostScript风味的OpenType”)字体。
我该如何在Python中使用fontTools库?即,我需要检查哪个字体表的值?
答案 0 :(得分:1)
版本存储在字体文件头中,而不存储在字体数据表中。如果您有一个ttLib.TTFont
对象(即您已经使用fontTools打开了一个字体文件),则可以查看.sfntVersion
对象的TTFont
属性以获取版本(通常会是0x00010000
/版本1或0x4F54544F
/ OTTO,但是还有其他可能的值,请参见下文)。但这是假设您已经通过打开字体文件创建了TTFont
对象,因此这可能是一种鸡与蛋的问题。如果您有兴趣在尝试打开文件/创建TTFont
之前了解版本,则必须(至少)嗅探fontTools之外的前四个字节。
注意:您的问题让我有些困惑。您提到了类型1,它实际上是一种PostScript字体,但(通常)不是OpenType / sfnt内置字体(即Type 2,“紧凑字体格式”或CFF)中的那种。据说有一种 可以用OpenType / sfnt字体存储Type 1。苹果在其TrueType Reference manual中提到了这一点:
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包含位图的“手提箱”文件。类型1字体文件的开头字节为%!PS-AdobeFont-1
。