可变字体不包含多个离散字体(如在集合中),而是包含单个字体,其中包含描述字形轮廓变化方式的数据,以及设计可以在其中进行设计的设计空间的描述各不相同。例如,可变字体可能支持整个设计空间的变化,其中一个轴的粗细为 300 到 700(比如说),第二个轴的宽度为 75 到 150(比如说)。设计空间内的每个点都是一个“实例”。可变字体还可以有一组命名实例,它们是设计空间内的实例,字体设计者为其指定了特定的样式名称。
在 Windows 字体预览器中,当顶部显示“OpenType Font Variations”时,“上一个”和“下一个”按钮将逐步浏览字体中的命名实例。
如果字体使用 TrueType 轮廓,则字体数据包含“glyf”表中的轮廓数据,就像任何其他 TrueType 风格的字体一样,而且还包含单独“gvar”表中的增量数据。对于字形轮廓中的每个控制点,增量数据描述了设计空间中某些实例的给定控制点如何从其默认位置移动。对于该实例和默认实例之间的其他实例,增量使用线性插值进行缩放。
因此,当显示文本时,选择特定实例,光栅化器采用默认字形轮廓,并使用“gvar”表中的增量数据将缩放增量应用到这些轮廓的控制点,根据所选内容进行缩放实例。
(我只提到了应用于字形轮廓的增量。也可以将增量应用于字体中的其他数据,例如字体或字形度量、GPOS 表中的定位数据等)
鉴于此,您所要求的不是从集合中提取单独的字体的问题,而是如何通过选择特定实例然后应用所有的方法来导出可以“派生”的字体数据之一该实例的缩放增量。 Windows本身需要能够为打印或生成PDF等场景生成实例字体数据。不过,这是在内部完成的,并且没有输出实例字体数据的公共 API。
不过,有些工具可以导出派生的实例字体数据。例如,FontTools 中的
instancer