首页 文章

True Type字体格式:笔位置,高级宽度和字距

提问于
浏览
0

我正在做一些字体工作,现在使用TTF(True Type Font)文件格式 . 我知道字形有一个笔尖位置和一个 advance width 参数,它指定在绘制下一个字形之前我们应该向右移动的距离(在这里假设从左到右的字体和水平) . 我的问题:

  • 在哪里可以找到FFT文件中高级宽度的数据 . 那是在hhea表中吗?是 advanceWidthMax

  • 我找不到文件中定义的笔位置在哪里?你能告诉我这个存放的表吗? (或者我应该从字形xmin,ymin,基线和左方轴承数据计算出来?然后可能使用字距调整进行额外的小调整?)

  • 是字体的高级宽度全局?

  • 每个字形都有笔位吗?

  • 我理解为了调整字形之间的位置,你应该使用指定字形之间相对于 advanced width 的字距的字距调整数据 . 那是对的吗?

编辑

我找到了一些问题的部分答案:

  • hhea 包含整个字体的信息

  • 虽然这个信息不太适用 . 您需要从 htmx 表中读取包含字体中每个字形数据的数据(左侧轴承和前进宽度) .

我仍然对笔位置感兴趣)以及如何正确使用字距调整数据 .

1 回答

  • 0

    希望这可以帮助将来的人们 . 我找到了什么:

    • hhea 包含整个字体的信息

    • 虽然这个信息不太适用 . 您需要从 html 表中读取包含字体中每个字形数据的数据(左侧轴承和前进宽度) . 通常,此表包含字体包含字形的条目数 . 每个条目指定字形左侧方位和前进宽度 .

    我没有找到关于笔位置的任何信息,但我假设字形的xmin值是相对于EM方格的原点 . 因此,要找到笔位置(在x中),您需要执行以下操作:

    pos_pos_x = glyph->leftSideBearing - glyph->min.x
    

    一旦绘制了字形,您需要移动 glyph->advanceWidth 并对绘制的字形重复该过程 . 我不知道这是否100%准确,但至少这是我迄今为止所做的逆转工程 .

相关问题