我正在尝试解析truetype字体以构建和存储ascender,每个fontsize的下行器,我正在使用http://nodebox.github.io/opentype.js/做了一项了不起的工作,但我不明白如何计算返回值
示例字体Blackoak(adobe) 我有[Ascender,Descender] = 1900和-5OO
我认为这些数字表示距离基线在em空间中的距离,但我是否需要其他元信息来计算这些值?
答案 0 :(得分:2)
如果要计算特定字体大小的ascender / descender(以像素为单位),则需要查找OS/2
表sTypoAscender
和sTypoDescender
值(按照{{3}的指示})。 ascender
表的descender
和hhea
值仅标记为W3C,其中不必然与实际计算值相对应。关于价值类型,你是对的,上升和下行是UPM单位,负数是指基线以下。
为了将这些数字转换为特定字体大小的像素,您还需要提取字体中每个单位的数量。您可以通过从unitsPerEm
表中读取head
值来执行此操作。通常,对于OTF,它的1000 UPM,用于TTF - 1024或2048 UPM。 sTypoAscender
和sTypoDescender
的绝对值应该加起来为unitsPerEm
。然后它只是一个比例的问题。
例如,让我们看看opentype.js font designer's intention并假设16px字体大小。值unitsPerEm
为2048 UPM,sTypoAscender
和sTypoDescender
相应地为1536和-512(1536 + 512 = 2048):
Ascender = 16 * 1536/2048 = 12px (above baseline)
Descender = 16 * -512/2048 = -4px (below baseline)