【问题标题】:Corrupt TrueType Font Detection损坏的 TrueType 字体检测
【发布时间】:2010-10-11 13:22:31
【问题描述】:

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

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

我没有重建字体的选项。我是一个消费者——我需要检测传入的字体是否损坏,以及是否通过尽可能少的工作来解决它。

以防万一——我使用的是 32 位和 64 位的 Windows XP/Vista 及其服务器版本!

【问题讨论】:

    标签: fonts truetype


    【解决方案1】:

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

    【讨论】:

    • 我正在消耗输入,我需要尽快退出 - 所以这不起作用。我会把这个添加到问题中:)
    • 感谢您的想法,您解决了我遇到的a related problem
    【解决方案2】:

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

    是的。 如果您已经按照您的指示构建/拥有一个 TrueType/OpenType 解析库,则该特定值很容易验证。您需要解析每个字形(来自'glyf' table,使用“loca”表作为索引),逐个获取每个字形的轮廓数,并比较字体范围的最大值到存储在'maxp'中的那个。

    请注意,'maxp' 中的其他一些值不是这么容易测试的;例如,maxZones、maxTwilightPoints、maxStorage、maxFunctionDefs、maxInstructionDefs、maxStackElements、maxSizeOfInstructions 都需要解析其他表,其中一些需要使用 TrueType 缩放器和解释器。

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

    【讨论】:

      【解决方案3】:

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

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

      ETA re q 编辑:那么问题只是“maxContours 的哪些值太低/太高”?据我所知,没有记录在案的限制,但我知道在 maxContours 上“添加一些”是很常见的,以防字形包含的轮廓比它所声明的要多。

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

      【讨论】:

      • 谢谢!但是不,我不需要解析器。我将编辑我的问题以增加清晰度。
      猜你喜欢
      • 1970-01-01
      • 2011-08-20
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      • 2016-07-31
      • 2011-07-24
      • 1970-01-01
      • 2010-12-01
      相关资源
      最近更新 更多