损坏的TrueType字体检测

时间:2009-03-05 16:14:56

标签: fonts true-type-fonts

我目前正在处理腐败的TrueType字体。我可用的程序告诉我maxp表存在问题 - maxContours成员的值太大。是否有一种确定的方法可以检测maxContours值过高或过低(是的,这也可能是一个问题)? (字体是程序,因此检测字体文件的一种方法是执行它们,但这对我来说不是一个可接受的解决方案。)

我不需要字体库,因为我无法添加字体库。我已经推出了自己的TrueType字体解析器。剩下的就是检查上面提到的表的给定值是否不正确。然后我会将解析器和支票添加到我的产品中。

我没有重建字体的选项。我是一个消费者 - 我需要检测传入的字体是否已损坏,以及是否尽可能少地完成工作。

如果它有帮助 - 我在Windows XP / Vista上都是32& 64位及其服务器版本!

3 个答案:

答案 0 :(得分:3)

我没有尝试检测错误,而是发现用FontForge重建trouble-font最方便。这可以完全自动化,因为它提供了丰富的命令行和脚本API。另外,如果需要,您可以将字体转换为更方便的格式或编码。

答案 1 :(得分:3)

  

有没有一种可靠的方法来检测maxContours值何时太高或太低(是的,这也可能是个问题)?

是。如果您已经建立/拥有一个TrueType / OpenType解析库,那么这个特定的值很容易验证。你需要解析每个字形(来自'glyf' table,使用'loca'表作为索引),逐个获得每个字形的轮廓数量,并比较字体 - 宽度最大值存储在'maxp'

请注意,'maxp'中的其他一些值而不是这个简单易于测试;例如,maxZones,maxTwilightPoints,maxStorage,maxFunctionDefs,maxInstructionDefs,maxStackElements,maxSizeOfInstructions都需要解析其他表,对于其中一些表,可以访问TrueType缩放器和解释器。

一点背景:'maxp'(最大配置文件)表旨在作为可能有用的字体范围最大值的快捷方式/摘要,作为内存分配的辅助。所以一般来说,如果'maxp'中的值高于实际字体值,那么最糟糕的情况就是你分配了太多内存......也就是说,如果你在一个实际上使用全部内存的平台上为此目的的'maxp'值。

答案 2 :(得分:0)

您使用的是什么平台?我已经能够使用Python的FontTools库非常愉快地破解TrueType文件:

font= fontTools.ttLib.TTFont("suspect.ttf")
font['maxp'].maxContours

ETA re q edit:问题就是“maxContours的值太低/太高了”?据我所知,没有记录的限制,但我知道,如果一个字形包含的轮廓多于它所说的轮廓,那么在maxContours上添加一些内容是相当普遍的。

(麻烦的字体中有什么是maxContours,它与字形中实际使用的轮廓数有什么关系?)