2009-03-05 51 views
6

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

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

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

在情况下,它可以帮助 - 我在Windows XP/Vista的32 & 64位和他们的服务器版本!

回答

0

您使用的平台是?我已经能够很愉快破解TrueType字体文件使用FontTools库的Python:

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

ETA重q编辑:那么,问题只是“什么样的价值观maxContours的过低/过高”?据我所知,没有文件记录的限制,但是我知道在字形包含的轮廓比其状态更多的情况下,向maxContours添加一些内容是相当常见的。

(什么maxContours在麻烦的字体,以及它是如何与在字形实际使用轮廓的数量?)

+0

谢谢!但是,不,我不需要解析器。我会编辑我的问题以增加清晰度。 – dirkgently 2009-03-05 17:23:01

2

而不是试图发现错误,我发现它最方便的,只是重建麻烦字体与FontForge。这可以完全自动化,因为它提供了丰富的命令行和脚本API。另外,如果需要,您可以将字体转换为更方便的格式或编码。

+0

我正在消耗投入,我需要尽快救助 - 所以这是行不通的。我会添加到这个问题:) – dirkgently 2009-03-05 17:25:15

3

是否有确定的方法来检测maxContours值太高或太低(是的,这也可能是一个问题)?

是的。如果您已经按照您的指示构建/使用了TrueType/OpenType解析库,则此特定值非常易于验证。您需要分析每个字形(从'glyf' table开始,使用'loca'表作为索引),逐个获取每个字形的轮廓数量,并将字体宽度最大值与存储在'maxp'

请注意,'maxp'中的一些其他值是而不是这个简单的测试;例如,maxZones,maxTwilightPoints,maxStorage,maxFunctionDefs,maxInstructionDefs,maxStackElements,maxSizeOfInstructions都需要解析其他表,并且其中一些表需要解析TrueType定标器和解释器。

一点背景:在“MAXP”(最大轮廓)表意欲是潜在-有用字体宽最大值的快捷/摘要,在存储器分配的辅助。因此,一般来说,如果'maxp'中的值高于实际字体值,最糟糕的情况是您分配的内存太多......也就是说,如果您使用的平台实际上使用了所有为此目的的'maxp'值。