TTF/OTF 头表中的 checkSumAdjustment 是做啥用的?

Posted

技术标签:

【中文标题】TTF/OTF 头表中的 checkSumAdjustment 是做啥用的?【英文标题】:What is checkSumAdjustment in TTF/OTF head table used for?TTF/OTF 头表中的 checkSumAdjustment 是做什么用的? 【发布时间】:2014-11-01 20:52:07 【问题描述】:

TrueType 和 OpenType 的规范在 Sfnt 的“head”或“bhed”表中指定了 checkSumAdjustment。两个规范都描述了如何计算这个值,但我找不到任何关于这个值为什么存在以及它的用途的信息。

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

【问题讨论】:

这只是一个校验和的校验和。最初的 TTF 文件格式可以追溯到传输中经常丢失比特的时代。 (这也是防止新手和十六进制编辑器将自己的名字注入受版权保护的字体的简单方法。) 【参考方案1】:

该值的意义在于允许字体引擎检测字体中的损坏,而无需实际首先解析所有字体数据。理想情况下,校验和将一直位于文件的开头,但由于需要统一各种字体格式,所以不是。相反,它在主表中。愚蠢,但我们坚持下去。

字体中的每个表都有自己的校验和值,因此引擎可以“按原样”验证字体的某些部分是否正确,但为了使事情更容易,字体本身也有一个主校验和,更容易计算(通过解析最少量的数据在字节流中找到它的值偏移量,然后将整个字节流求和为 LONG,同时将此校验和所在的四个字节视为 0x00000000),可用于确定字体是否遵循 OpenType 规范当它被编码而不需要查看每个表的校验和是什么时,它从哪里开始,它有多长,然后对字节流的不同部分运行相同的校验和计算多次。如果主校验和失败,那么各个表的校验和是否正确都无关紧要:这种字体有些古怪。

从 0xB1B0AFBA 中减去几乎只是“出于历史原因”,因为 OpenType 统一了多个规范,而不是从头开始,因此其中留下了一些旧格式的包袱(例如,“OS/2”表,是一个通用的元数据表,和OS/2 (Warp)操作系统已经没有关系了,也很久没有了)。

【讨论】:

以上是关于TTF/OTF 头表中的 checkSumAdjustment 是做啥用的?的主要内容,如果未能解决你的问题,请参考以下文章

将 Webfonts 转换为 ttf / otf 格式 - 有可能吗?

用于将 TTF/OTF 字体转换为 SVG 的命令行工具

TTF OTF TTC 这三种格式的字体哪种好?跪求解释

FedoraCentOS install TTF/otf fonts

Source Sans Pro 的 TTF 和 OTF 版本在 Swing (Nimbus L&F) 中显示不同

vue 中引入pingfang字体 或者其他字体 支持ttf otf格式