【问题标题】:Number of font tables in TrueType Font files?TrueType 字体文件中的字体表数量?
【发布时间】:2019-12-10 23:33:16
【问题描述】:

根据Apple's Reference manual for TrueType字体文件,共有45种不同类型的字体表。检查我在我的系统上安装的那些 ttf,我确定这些文件中实际存在的表的数量范围从每个文件 12 到最多 22 个字体表。

进一步查看真类型字体文件的结构,它从以下信息开始:​​

uint32 scaler type 表示用于光栅化此字体的 OFA 缩放器的标签;有关详细信息,请参阅下面有关缩放器类型的说明。
uint16 numTables 表数
uint16 searchRange(2 uint16 entrySelector log2(2的最大幂 uint16 rangeShift numTables*16-searchRange

这让我们有理由相信,对于预先计算但又完全是多余的字段rangeShiftentrySelectorsearchRange,会有共同的需求。它甚至声明它们被用于对字体表列表进行二进制搜索:

searchRange、entrySelector 和 rangeShift 的条目用于 便于对后面的表目录进行快速二进制搜索 (来源https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html

考虑添加这些字段(无论如何都可以从numTables 即时计算)的正当理由是确实存在大量字体表。

因此,我的问题是,尽管经过我的测试,确实存在确实存在合理预期真实类型字体具有更大(例如>1000)数量的表格的情况,这意味着问题是否完全可能45 种不同类型的字体表中的任何一种都可以出现多次?

它列出的表格如下。

  1. “acnt”(重音附件)表
  2. “ankr”(锚点)表
  3. “avar”(轴变化)表
  4. “bdat”(位图数据)表
  5. “bhed”(位图字体标题)表
  6. 'bloc'(位图位置)表
  7. “bsln”(基线)表
  8. “cmap”(字符代码映射)表
  9. “cvar”(CVT 变体)表
  10. 'cvt'(控制值)表
  11. “EBSC”(嵌入式位图缩放控制)表
  12. “fdsc”(字体描述符)表
  13. “壮举”(布局功能)表
  14. “fmtx”(字体规格)表
  15. “喜欢”(字体系列兼容性)表
  16. “fpgm”(字体程序)表
  17. “fvar”(字体变体)表
  18. “gasp”(网格拟合和扫描转换过程)表
  19. “glyf”(字形轮廓)表
  20. “gvar”(字形变体)表
  21. “hdmx”(水平设备指标)表
  22. 'head'(字体标题)表
  23. “hhea”(水平标题)表
  24. “hmtx”(水平指标)表
  25. 'just'(理由)表
  26. “kern”(字距调整)表
  27. “kerx”(扩展字距调整)表
  28. “lcar”(连字插入符号)表
  29. 'loca'(字形位置)表
  30. “ltag”(语言标签)表
  31. “maxp”(最大配置文件)表
  32. “元”(元数据)表
  33. “morx”(扩展变形)表
  34. 'name'(名称)表
  35. “opbd”(光学边界)表
  36. “OS/2”(兼容性)表
  37. “post”(字形名称和 PostScript 兼容性)表
  38. “准备”(控制价值计划)表
  39. “prop”(属性)表
  40. “sbix”(扩展位图)表
  41. “trak”(跟踪)表
  42. 'vhea'(垂直标题)表
  43. “vmtx”(垂直指标)表
  44. “外部参照”(交叉引用)表
  45. “Zapf”(字形参考)表

似乎“字体表”允许其中任意“扩展”,例如有一个标记为FFTM的字体表,

"[...] 是 FontForge 独有的。它包含三个时间戳:第一个 FontForge 的版本日期,然后是生成字体的时间,以及生成字体的时间 字体已创建。我在这里描述它的格式。”

https://fontforge.github.io/TrueOpenTables.html

即使是像FFTM 这样偶尔添加的表格似乎也不值得searchRange 等字段。

【问题讨论】:

    标签: fonts truetype file-format


    【解决方案1】:

    当 TrueType 在 1980 年代末/1990 年代初发明时,开发人员不确定随着该格式的采用会如何发展。还要记住,当时处理器的速度要慢得多。

    事实证明,事实上,很少有字体有超过 25 个表格,并且可能没有一个接近二进制搜索和使用预先计算的字段在查找表格时会产生很大差异的数字(而不是仅仅遍历排序列表)。

    不过,这些字段是规范的一部分,不能“省略”。许多实现会忽略这些字段,并且它们经常填充错误的值,但请注意,许多字体检查器/验证器/清理器会检查它们并可能将错误值标记为无效字体。所以如果你问这个关于创建字体的问题,我建议用正确的数据填写字段。

    【讨论】:

      猜你喜欢
      • 2012-03-18
      • 2019-10-02
      • 2012-03-22
      • 1970-01-01
      • 2015-02-01
      • 2016-05-30
      • 2014-12-07
      • 2011-06-01
      • 2016-12-28
      相关资源
      最近更新 更多