Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何使用fontTools检测Type 1和OpenType CFF字体_Python 3.x_Fonts_Ttx Fonttools - Fatal编程技术网

Python 3.x 如何使用fontTools检测Type 1和OpenType CFF字体

Python 3.x 如何使用fontTools检测Type 1和OpenType CFF字体,python-3.x,fonts,ttx-fonttools,Python 3.x,Fonts,Ttx Fonttools,我知道,通过检查“OTTO”0x4F5444F的前4个字节,可以检测Type 1和OpenType CFF“PostScript风格的OpenType”字体 在Python中如何使用该库实现这一点?例如,我需要检查哪个字体表的该值?版本存储在字体文件头中,而不是字体数据表中。如果您有一个ttLib.TTFont对象,即您使用fontTools打开了一个字体文件,那么您可以查看TTFont对象的.sfntVersion属性来获取版本,该版本通常为0x00010000/version 1或0x4F5

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


在Python中如何使用该库实现这一点?例如,我需要检查哪个字体表的该值?

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

注意:我对你的问题有点困惑。您提到类型1,它确实是一种PostScript字体,但通常不是OpenType/sfnt中包含的字体,即紧凑字体格式或CFF。假设有一种方法可以将类型1存储在OpenType/sfnt字体中;苹果在他们的报告中提到了这一点:

OS X和iOS将值“true”0x74727565和0x00010000识别为引用TrueType字体。值“typ1”0x74797031被认为是指sfnt包装中的旧式PostScript字体。值“OTTO”0x4F5444F表示带有PostScript轮廓的OpenType字体,即“CFF”表而不是“glyf”表。当前不支持其他值


因此,如果typ1实际上就是您要询问的内容,那么您可以在文件的前四个字节中查找0x74797031/typ1。但实际的typ1 sfnt字体非常罕见——几乎不存在。对于非Mac平台,绝大多数实际的Type 1字体将位于.PFA/.PFB文件中,或者位于OS X Mac之前的打印机字体文件中,该文件将与包含位图的旧资源文件配对。类型1字体文件将具有%!PS-AdobeFont-1作为文件的第一个字节。

感谢您的详细回复!出于我的目的,检查.sfntVersion就足够了。