Pat*_*Pat 2 c specifications truetype opentype
对于规格的TrueType和OpenType字体中的SFNT的“头”或“Bhed的”表指定checkSumAdjustment。两种规范都描述了如何计算该值,但是我找不到有关该值为何存在以及其用途的任何信息。
奖励问题:为什么我必须从0xB1B0AFBA中减去?
此值的目的是允许字体引擎检测字体中的损坏,而无需实际首先解析所有字体数据。理想情况下,校验和应始终位于文件开头,但是由于需要统一各种字体格式,所以不是。相反,它在头表中。愚蠢,但我们坚持下去。
字体中的每个表都有其自己的校验和值,以便引擎可以“按原样”验证字体的各个部分是否正确,但是为了使事情变得更容易,字体本身还具有一个主校验和,该校验和甚至更易于计算(查找通过解析最少的数据量,将字节流中的值偏移,然后将整个字节流求和为LONG,同时将此校验和位于的四个字节视为0x00000000),并且可用于确定字体是否遵循OpenType规范无需查看每个表表示其校验和的内容,它的起始位置,长度有多长,然后针对字节流的不同部分多次运行相同的校验和计算,即可对其进行编码。如果主校验和失败,那么单个表的校验和是否正确都没有关系:
0xB1B0AFBA的减法几乎完全是出于“出于历史原因”,因为OpenType统一了多个规格,而不是从头开始,因此,其中保留了一些较旧格式的包bag(例如,“ OS / 2”表是通用的元数据表,并且与OS / 2(Warp)操作系统无关,也没有很长时间了)。
| 归档时间: |
|
| 查看次数: |
792 次 |
| 最近记录: |