gpt4 book ai didi

fonts - 如何指示 SBIX TrueType/OpenType 字体表中缺少的字形

转载 作者:行者123 更新时间:2023-12-03 22:28:33 26 4
gpt4 key购买 nike

我正在尝试为图标字体编写器实现对 SBIX 表的支持,但我不清楚 TrueType/OpenType 规范。

可以在此处找到 SBIX 表的规范:
https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6sbix.html
https://docs.microsoft.com/en-us/typography/opentype/spec/sbix

它说:“不是每个字形都需要在 'sbix' 表的每个罢工中都有一个条目。如果一个字形在 'sbix' 表的任何罢工中都没有条目,那么它的轮廓就会被绘制出来。”

所以不是每个字形都必须提供位图,这很公平。

但是我如何表明没有位图可用于字形?我没有看到从字形索引到罢工条目的任何映射。

这是否意味着简单的data对于没有位图的字形,字形数据记录中的字段为空(长度 0)?或者整个字形数据记录的长度为零?似乎规范对此不是很清楚。还是我完全错过了什么?

最佳答案

某种程度上,SBIX 是一个完全独立的表,没有像 glyf/loca 或 cmap 子表那样的二级索引表。检查是否有数据的方式不需要实际读取字形的数据块,您只需要检查与正在成形的文本使用的点大小相关的罢工的偏移数组。

引用规范:

the length of data for glyph N is glyphDataOffset[N+1] – glyphDataOffset[N]. If this is zero, there is no bitmap data for that glyph in this strike. There is one extra offset in the array in order to provide the length of data for the last glyph.



所以:您以通常的方式找到您的字形的 id,然后您检查您的 id 的偏移值以及下一个字形的 id,如果它们相同,则 SBIX 表中没有与您的字形相关联的数据。

相反,如果您正在编写代码来生成 SBIX 表,那么对于需要位图回退的每个点大小,您创建一个罢工,每个罢工 必须有一个偏移字段是 Offset32[maxp.numGlyphs + 1] .那就是:你没有选择,每个字形都有一个偏移量,但如果一个字形不需要位图来敲击,你就不会向字形数据块写入任何字形数据,而你只留下偏移量直到某些具有关联位图数据的后续字形。
  • 初始化 offset32长度数组 maxp.numGlyphs + 1 ,
  • 为字形数据记录初始化一个可变长度的数据结构,
  • 将滚动偏移跟踪器初始化为值 strike.startOffset + 4 + offsets.length * 4 ,
  • 从字形 id 0 开始,对于每个字形执行:
  • 如果需要位图,则创建一个字形数据记录,或者表示不会将记录写入字形数据块(例如 nullfalse0 或任何在您选择的语言中最有效的东西),
  • 如果没有记录,什么都不做。
  • 如果有要写入的记录,则将其附加到字形数据数据结构中,并添加 bytelength(glyphDataRecord)到偏移跟踪器。
  • 套装 offsets[id] = trackervalue , 将字形 ID 增加 1,并重复循环
  • 处理完所有字形后,添加最终偏移跟踪器值 offsets[maxp.numGlyphs] = trackvalue ,存储此罢工结束的偏移量。

  • 当然请注意,(3)可以完全以延迟方式完成:如果您还不知道strike.startOffset,那么您只需从0开始,一旦您知道您的数据在文件中的实际位置,请更新所有值通过添加常量 stroke.startOffset + 4 + offsets.length * 4 在您的偏移数组中到每个值。

    关于fonts - 如何指示 SBIX TrueType/OpenType 字体表中缺少的字形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52680926/

    26 4 0
    文章推荐: 服务器上带有配置和 SuppressionFilter 的 Eclipse Checkstyle
    文章推荐: branch.io - _branch_match_id是什么意思?
    文章推荐: smalltalk - Pharo Smalltalk 中的调整点
    文章推荐: angularjs - 使用 ng-if 根据