什么是TTF / OTF头表中的checkSumAdjustment用于?

时间:2014-09-08 15:18:15

标签: c true-type-fonts specifications opentype

TrueTypeOpenType的规范在' head'中指定了checkSumAdjustment。或者' bhed' Sfnt的桌子。这两个规范都描述了如何计算这个值,但是我无法找到有关该值存在的原因及其用途的任何信息。

奖金问题:为什么我必须从0xB1B0AFBA中减去?

1 个答案:

答案 0 :(得分:4)

此值的重点是允许字体引擎检测字体中的损坏,而不必首先解析所有字体数据。理想情况下,校验和将一直在文件的开头,但由于需要统一各种字体格式,不是。相反,它在头表中。傻,但我们一直坚持下去。

字体中的每个表都有自己的校验和值,因此引擎可以验证字体的某些部分是否正确"按原样#34;但为了使事情更容易,字体本身也有一个校验和这更容易计算(通过解析最少量的数据在字节流中找到它的值偏移,然后将整个字节流加总为LONG,同时将此校验和所在的四个字节视为0x00000000)并且可以使用确定字体在编码时是否遵循OpenType规范,而不需要查找每个表所说的校验和是什么,它在哪里开始,多长时间,然后对字节的不同部分运行相同的校验和计算几次流。如果主校验和失败,那么单个表的校验和是否正确并不重要:这个字体有些不可思议。

由于历史原因,从0xB1B0AFBA的减法几乎只是""因为OpenType统一了几个规格,而不是从头开始,所以还有一些来自旧格式的行李(例如," OS / 2"表是一般的元数据表,并且与OS / 2 Warp操作系统无关,在很长一段时间内也没有。)