计算字体truetype hhea值(上升,下降)

时间:2013-11-08 09:55:24

标签: fonts true-type-fonts opentype

我正在尝试解析truetype字体以构建和存储ascender,每个fontsize的下行器,我正在使用http://nodebox.github.io/opentype.js/做了一项了不起的工作,但我不明白如何计算返回值

示例字体Blackoak(adobe) 我有[Ascender,Descender] = 1900和-5OO

我认为这些数字表示距离基线在em空间中的距离,但我是否需要其他元信息来计算这些值?

1 个答案:

答案 0 :(得分:2)

如果要计算特定字体大小的ascender / descender(以像素为单位),则需要查找OS/2sTypoAscendersTypoDescender值(按照{{3}的指示})。 ascender表的descenderhhea值仅标记为W3C,其中必然与实际计算值相对应。关于价值类型,你是对的,上升和下行是UPM单位,负数是指基线以下。

为了将这些数字转换为特定字体大小的像素,您还需要提取字体中每个单位的数量。您可以通过从unitsPerEm表中读取head值来执行此操作。通常,对于OTF,它的1000 UPM,用于TTF - 1024或2048 UPM。 sTypoAscendersTypoDescender的绝对值应该加起来为unitsPerEm。然后它只是一个比例的问题。

例如,让我们看看opentype.js font designer's intention并假设16px字体大小。值unitsPerEm为2048 UPM,sTypoAscendersTypoDescender相应地为1536和-512(1536 + 512 = 2048):

 Ascender = 16 * 1536/2048 = 12px  (above baseline)
Descender = 16 * -512/2048 = -4px  (below baseline)