Если вы хотите, чтобы вычислить ASCENDER/спусковой в пикселях для определенного размера шрифта, то вам нужно для поиска OS/2
таблицы для sTypoAscender
и sTypoDescender
значений (в соответствии с указаниями W3C). Значения ascender
и descender
hhea
имеют только font designer's intention, которые не обязательно соответствуют действительным вычисленным значениям. Что касается типа значения, вы правы, зажим и спусковой механизм находятся в единицах UPM и отрицательных значениях ниже базовой линии.
Для того, чтобы преобразовать эти цифры в пикселях для определенного размера шрифта, вам также нужно извлечь сколько единиц единиц на em в вашем шрифте. Вы можете сделать это, читая unitsPerEm
значение из таблицы head
. Обычно для OTF 1000 UPM, для TTF - 1024 или 2048 UPM. Абсолютные значения sTypoAscender
и sTypoDescender
должны содержать значение unitsPerEm
. И тогда это просто вопрос соотношения.
Например, давайте рассмотрим opentype.js Font Inspector и предположим размер шрифта 16px. Значение unitsPerEm
2048 УПМ, sTypoAscender
и sTypoDescender
являются 1536 и -512 соответственно (1536 + 512 = 2048):
Ascender = 16 * 1536/2048 = 12px (above baseline)
Descender = 16 * -512/2048 = -4px (below baseline)
Здесь формулу, чтобы получить правильное значение в пикселе = Надстрочный * шкала (FontSize)/unitsPerEm (для мм просто умножьте на 25,4 и разделите на 72 dpi. – hgates