什么是一 .cff2 文件?
CFF2 文件格式是 CFF 文件格式的 2.0 版,允许有效存储字形轮廓和类似于 CFF 文件格式的元数据。 CFF2 与 CFF 的不同之处在于它旨在作为带有标签 CFF2 的“sfnt"表在 OpenType 字体的上下文中使用。它不能作为独立程序使用,它依赖于其他 OpenType 表中的数据。
CFF2 文件格式
CFF2 文件格式规范 包含有关文件格式的内部数据布局、数据类型、表格和其他内部信息的详细信息。可供开发者参考。关于这些的一些细节如下。
数据布局
CFF2 文件格式的二进制数据在逻辑上被组织为多个独立的数据结构。二进制数据内的布局如下表所示。
进入 | 评论 |
---|---|
标题 | 固定位置 |
顶级DICT | 固定位置 |
全球子指数 | 固定位置 |
变化 | 商店 |
FDSelect | 仅当字体 DICT INDEX 中有多个字体 DICT 时才显示。 |
字体字典索引 | |
字体 DICT 数组 | 包含在字体 DICT INDEX 中。 |
私人DICT | 每个字体 DICT 一个。 |
只有前三个结构是基于固定位置的。剩余部分通过偏移量到达,并且可以更改它们的顺序。
数据类型
CFF2 文件格式使用以下数据类型。
名称 | 范围 | 描述 |
---|---|---|
uint8 | 0 到 255 | 8 位无符号数 |
uint16 | 0 到 65535 | 16位无符号数 |
uint32 | 0 到 4294967295 | 32位无符号数 |
偏移量 | 变化 | 1、2、3 或 4 字节偏移(由索引表中的 OffSize 字段指定) |
OffSize | 1 到 4 | 1 字节无符号数指定一个或多个偏移字段的大小 |
它以大端字节顺序存储所有多字节数值数据和偏移量字段。 CFF2 格式没有填充字节,因为它不遵守任何对齐限制。
DICT 数据
CFF2 文件包含字体字典数据,作为紧凑标记化格式的键值对。字典键被编码为 1 或 2 字节运算符,字典值被编码为可变大小的数字操作数。使用 DICT 数据格式的结构共有三种:“Top DICT"、“Font DICT"和“Private DICT"。定义了许多不同大小的整数操作数类型,并按下表所示进行编码(操作数的第一个字节是 b0,第二个字节是 b1,依此类推)。
大小 | b0 范围 | 取值范围 | 取值计算 |
---|---|---|---|
1 | 32 到 246 | -107 到 +107 | b0 - 139 |
2 | 247 到 250 | +108 到 +1131 | (b0 - 247) * 256 + b1 + 108 |
2 | 251 到 254 | -1131 至 -108 | -(b0 - 251) * 256 - b1 - 108 |
3 | 28 | -32768 至 +32767 | b1 « 8 |
5 | 29 | -(2^31) 到 +(2^31 - 1) | b1 « 24 | b2 « 16 | b3 « 8 | b4 |
标题
二进制数据以具有下表所示格式的标头开始。
类型 | 名称 | 描述 |
---|---|---|
uint8 | 主要版本 | 格式化主要版本。设置为 2。 |
uint8 | 次要版本 | 格式化次要版本。设置为零。 |
uint8 | 标头尺寸 | 标头大小(字节)。 |
uint16 | 顶部字典长度 | 顶部 DICT 结构的长度(以字节为单位)。 |