度量图怎么读

度量图怎么读

最后更新 2026-11-02

  • 度量
  • metrics
  • unitsPerEm
  • 基线
  • ascender
  • descender
  • viewBox
  • em 方框
  • 百分比
EN中文
本页目录

检查器的度量面板画的是一个字形在一个 em 方框里的位置,加上字体声明的各种边界。它不是字体好不好看的评价图,而是这一行要留多少空间的施工图。

先说坐标:字体单位,向上为负

  • 一切数值都是字体单位(unitsPerEm 分之一),不是像素;
  • 基线是 y = 0;
  • 向上是负(这是 SVG 的方向)。

所以一条 ascender = 800(字体单位,向上)的线,在 SVG 里画成 y = -800。图上看起来在上面,数值是正的,这是同一个东西的两种说法。

因为不涉及像素,图与字号无关:12px 和 120px 画出来是同一张图。缩放全交给 SVG 的 viewBox。

九组图层

图层 画什么 来源
Baseline 基线(y = 0) ——
hhea 上伸、下伸 hhea.ascender / descender
OS/2 typo 排版用上下伸 OS/2.sTypoAscender / sTypoDescender
OS/2 win Windows 裁切边界 OS/2.usWinAscent / usWinDescent
Cap height 大写高度 OS/2.sCapHeight
x-height 小写 x 高度 OS/2.sxHeight
Underline 下划线位置 post.underlinePosition
Advance / side bearings 竖直的三条 字形自己的 advanceWidth 与 leftSideBearing
Glyph bounding box 字形实际占的框(ink) 字形包围盒

图层可以单独关掉——关掉只是让图清爽,数值表照样保留。

Ascender 800 Cap 700 x-height 500 Baseline 0 Underline −100 Descender −200 x = 0 1 em advance 600 lsb
示意,不是某个具体字体:按 unitsPerEm = 1000 举例。右侧是原始字段值(注意符号方向,下伸和下划线都是负数),底部是三条横方向的线;灰框是字形墨迹(ink),它和 advance 不是一回事——中间差的正是右侧边距。

竖直的三条线

  • 原点(x = 0):字形的起点;
  • advance:这个字形占的水平距离,下一个字从这里开始;
  • lsb(左侧边距):从原点到字形墨迹的距离;
  • 1 em:x = unitsPerEm 那条线,用来对照这个字形占了一 em 的多少。

右侧边距(rsb)在图上不画线,但表里有:advance − lsb − 墨迹宽度。

数值表

表里每一行都给出字体单位与占一 em 的百分比(百分比 = 值 ÷ unitsPerEm)。百分比比绝对值更有用:不同字体的 unitsPerEm 可能是 1000 或 2048,绝对值没法直接比。

行包括:

  • 基线与三组上下伸(hhea / typo / win)及各自的 line gap;
  • cap height、x-height;
  • 下划线位置与粗细;
  • unitsPerEm;
  • 字形的 advance、lsb、rsb;
  • 墨迹的左右上下边界与高度。

三个符号方向,别读反

值 常见值 含义
hhea.descender 负数 基线以下多少
OS/2.usWinDescent 正数 向下多少,不是坐标
post.underlinePosition 负数 下划线顶部在基线以下多少
post.italicAngle 负数 向右倾

本站已经在 shared/src/fonts/metrics.ts 一处把这些统一成向上为负,组件里不再翻第二次。你看到的线是统一的,表里给的是原始值——所以表里出现正数不代表图画错了。

两套 y 方向

这是实现上最容易出错的地方,也是你排查图反了时的第一嫌疑:

  • 字形轮廓(SVG path)是 SVG 方向:y 向下;
  • 字形包围盒与度量值是字体方向:y 向上。

画框时必须把 top 与 bottom 互换,否则整个框会翻过来。本站把这类换算收敛在一个文件里,就是为了避免某一条线独自翻了个身。

为什么有些字符画不出来

如果字形索引是 0(.notdef,豆腐块),说明这个字体没有这个字。这时图上的度量是 .notdef 的,不代表任何真实字形——面板会直接说字体里没有这个字符,而不是画一张有意义的图。

延伸阅读

  • shared/src/fonts/metrics.ts(度量模型与注释)
  • OpenType 规范:hhea、OS/2、post
  • 本站:head、hhea 与 post