# “头”表
# 一般表信息
'head' 表包含有关字体的全局信息。 它记录了字体版本号、创建和修改日期、修订号和适用于整个字体的基本排版数据等事实。 这包括字体边界框的规范、字体字形最有可能写入的方向以及有关字形在 em 方块中的位置的其他信息。 校验和用于验证字体中数据的完整性。 它还可用于区分两种相似的字体。
这些标志提供有关字体的全局信息。 如果位 0 设置为 1,则字体的基线位于 y=0(即 x 轴)。 如果位 1 设置为 1,则假定最左侧黑色位的 x 位置为左侧轴承。 如果第 2 位设置为 1,则指令可以明确地使用点大小代替每 em 的像素。 这意味着缩放 12 点屏幕字体以获得等效的打印机字体可能不会产生与请求 12 点打印机字体相同的结果。 设置位 3 会导致使用整数缩放而不是小数缩放。 设置位 4 允许字体改变设备相关宽度。
必须通过查看字体中字形的轮廓数据来计算 xMin、yMin、xMax 和 yMax 值。 它们一起指定了一个矩形,该矩形构成字体中所有(未嵌合的)字形的边界框。
字体每 em 的单位数在此表中设置。这个值应该是 2 的幂。它的范围是从 64 到 16384。
此值 minimumRecPPEM 是此字体的最小可读大小(以像素/em 为单位)。
fontDirectionHint 提供有关可能设置此字体中的字形的方式的信息。值为 0 表示混合方向字体;值 1 仅表示从左到右的字形,-1 仅表示从右到左的字形。值 2 和 -2 指的是包含一些中性字形的字体,即没有强方向性的字形。
中性角色没有固有的方向性。 (它不是一个宽度为零的字符)。空格和标点符号是中性字符的示例。非中性字符是具有固有方向性的字符。例如罗马字母(从左到右)和阿拉伯字母(从右到左)具有方向性。在存在空格和标点符号的罗马字体中,字体方向提示应设置为 2。
indexToLocFormat 值指示索引到 loc ('loca') 表中使用的偏移格式类型。
# 表 22:'head' 表
| 类型 | 名称 | 描述 |
|---|---|---|
| Fixed | version | 0x00010000(version 1.0) |
| Fixed | fontRevision | 由字体开发者设置 |
| uint32 | checkSumAdjustment | 计算:将其设置为0,计算'head'表的校验和并将其放入表目录中,将整个字体相加为uint32_t,然后存储0xB1B0AFBA - sum。 (结果,'head' 表的校验和将是错误的。没关系;不要重置它。) |
| uint32 | magicNumber | 设置为 0x5F0F3CF5 |
| uint16 | flags | bit 0 - y 值为 0 指定基线 bit 1 - 最左边黑色位的 x 位置是 LSB bit 2 - 缩放后的点大小和实际点大小会有所不同(即 24 点字形不同于按因子 2 缩放的 12 点字形) bit 3 - 使用整数缩放而不是小数 bit 4 - (由 Microsoft 实现的 TrueType 缩放器使用) bit 5 - 该位应该在旨在垂直布局的字体中设置,并且其中的字形已经绘制为 0 的 x 坐标对应于所需的垂直基线。 bit 6 - 该位必须设置为零。 bit 7 - 如果字体需要布局以进行正确的语言渲染(例如阿拉伯字体),则应设置该位。 bit 8 - 应为具有一个或多个默认发生的变形效果的 AAT 字体设置该位。 bit 9 - 如果字体包含任何从右到左的强字形,则应设置该位。 bit 10 - 如果字体包含印度风格的重新排列效果,则应设置该位。 bits 11-13 - 由 Adobe 定义。 bit 14 - 如果字体中的字形只是代码点范围的通用符号,例如最后使用的字体,则应设置该位。 |
| uint16 | unitsPerEm | 范围从 64 到 16384 |
| longDateTime | created | 国际日期(自 1904 年 1 月 1 日 GMT/UTC 时区午夜 12:00 开始的秒数。) |
| longDateTime | modified | 国际日期(自 1904 年 1 月 1 日 GMT/UTC 时区午夜 12:00 开始的秒数。) |
| FWord | xMin | 对于所有字形边界框 |
| FWord | yMin | 对于所有字形边界框 |
| FWord | xMax | 对于所有字形边界框 |
| FWord | yMax | 对于所有字形边界框 |
| uint16 | macStyle | bit 0 bold(加粗) bit 1 italic(斜体) bit 2 underline(下划线) bit 3 outline(大纲,几级标题,一级标题最大,九级标题最小) bit 4 shadow(阴影) bit 5 condensed (narrow)(字符间距) bit 6 extended(拓展) |
| uint16 | lowestRecPPEM | 以像素为单位的最小可读尺寸 |
| int16 | fontDirectionHint | 0 混合方向字形 1 只有强烈的从左到右的字形 2 像 1 但也包含中性 -1 只有强烈的从右到左的字形 -2 像 -1 但也包含中性 |
| int16 | indexToLocFormat | 0 表示短偏移量,1 表示长偏移量 |
| int16 | glyphDataFormat | 0 表示当前格式 |
# 特定于平台的信息
尽管它被正式列为“必需的”TrueType 表,但实际上并非 OS X 上的所有 sfnt 内置字体都需要它。事实上,甚至并非所有 TrueType 字体都需要它。
没有轮廓(outline)数据但仅由位图组成的 TrueType 字体不应具有“头部”表。 他们应该使用逐字节相同的“bhed”表。 OS X 使用“bhed”来表示字体没有轮廓(outline)的事实。
# 依赖关系
“头”表中的许多字段与其他表中的值密切相关。 例如,unitsPerEm 字段是所有处理曲线或度量的表的基础。 该表在整个 TrueType 渲染引擎中用作快捷方式,以确定字体的各个关键方面。
由于对任何其他表的任何更改都会影响“head”表的 checkSumAdjustment 和修改字段,因此在任何字体编辑操作后更新“head”表始终是最明智的。