hum*_*ace 2 fonts file-format truetype
根据Apple TrueType 参考手册字体文件参考手册,有45种不同类型的字体表。检查我在系统上安装的那些 ttf,我确定这些文件中实际存在的表格数量范围为每个文件 12 个到最多 22 个字体表格。
进一步查看 true type 字体文件的结构,它从以下信息开始:
uint32 缩放器类型 一个标签,指示用于光栅化此字体的 OFA 缩放器;有关详细信息,请参阅下面有关定标器类型的注释。
uint16 numTables 表的数量
uint16 searchRange(2 <= numTables 的最大幂)*16
uint16 EntrySelector log2(2 <= numTables 的最大幂)
uint16 rangeShift numTables*16-searchRange
rangeShift这使我们有理由相信,对预先计算的但完全冗余的字段, entrySelector,会有共同的需求searchRange。它甚至指出它们用于字体表列表的二进制搜索:
searchRange、entrySelector 和 rangeShift 的条目用于促进随后的表目录的快速二进制搜索(来源https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html)
甚至考虑添加这些字段的充分理由,这些字段无论如何都可以从numTables确实是存在大量字体表。
因此,我的问题是,尽管我进行了测试,但确实存在这样的情况,即可以合理地预期真实类型字体具有更大数量(例如> 1000)的表格,这意味着问题是否有可能45种不同类型的字体表可以多次出现吗?
它列出的表格如下。
- “acnt”(重音附件)表
- “ankr”(锚点)表
- “avar”(轴变化)表
- “bdat”(位图数据)表
- “bhed”(位图字体标题)表
- “bloc”(位图位置)表
- “bsln”(基线)表
- “cmap”(字符代码映射)表
- “cvar”(CVT 变体)表
- “cvt”(控制值)表
- “EBSC”(嵌入式位图缩放控制)表
- “fdsc”(字体描述符)表
- “feat”(布局功能)表
- “fmtx”(字体规格)表
- “fond”(字体系列兼容性)表
- “fpgm”(字体程序)表
- “fvar”(字体变体)表
- “gasp”(网格拟合和扫描转换过程)表
- “glyf”(字形轮廓)表
- “gvar”(字形变体)表
- “hdmx”(水平设备指标)表
- “head”(字体标题)表
- “hhea”(水平标题)表
- “hmtx”(水平指标)表
- “公正”(理由)表
- “kern”(字距调整)表
- “kerx”(扩展字距调整)表
- “lcar”(连字插入符)表
- “loca”(字形位置)表
- “ltag”(语言标签)表
- “maxp”(最大轮廓)表
- “元”(元数据)表
- “morx”(扩展变态)表
- 'name'(名字)表
- “opbd”(光学边界)表
- “OS/2”(兼容性)表
- “post”(字形名称和 PostScript 兼容性)表
- “准备”(控制值程序)表
- “prop”(属性)表
- “sbix”(扩展位图)表
- “trak”(跟踪)表
- “vhea”(垂直标题)表
- “vmtx”(垂直指标)表
- “xref”(交叉引用)表
- “Zapf”(字形参考)表
似乎“字体表”允许其中任何随机“扩展”,例如有一个标记为 的字体表FFTM,它
“[...]是FontForge独有的。它包含三个时间戳:首先是FontForge的版本日期,然后是字体生成时间,以及字体创建时间。我在这里描述了它的格式。”
https://fontforge.github.io/TrueOpenTables.html
即使是那些偶尔添加的表,例如FFTM似乎也不值得使用searchRange等字段。
当 TrueType 在 20 世纪 80 年代末/90 年代初发明时,开发人员不确定随着格式的采用,事情会如何发展。还要记住,当时处理器的速度要慢得多。
\n\n事实证明,事实上,很少有字体拥有超过 25 个表,并且可能没有一个字体能够接近这样的数字,在这种情况下,二分搜索和使用预先计算的字段将在定位表时产生很大的差异(而不是仅仅迭代排序列表)。
\n\n然而,这些字段是规范的一部分,并且不能是 \xe2\x80\x99\xe2\x80\x9comied\xe2\x80\x9d。许多实现忽略这些字段,并且它们经常填充错误的值,但请注意,许多字体检查器/验证器/消毒器确实会检查它们,并可能将错误的值标记为无效字体。因此,如果您\xe2\x80\x99询问有关创建字体的问题,我建议使用正确的数据填写字段。
\n