首页 > 解决方案 > 从包含多种字体的TTF中提取字体?

问题描述

我有一个 .ttf 文件,当我在 Windows 中打开它时,右上角有一个选项可以选择字体的变体之一。如何将这些变体提取到它们自己单独的 .ttf 文件中?不同的变体都有不同的“字体名称”。在此处输入图像描述

标签: fontstruetypefont-family

解决方案


该字体不是字体集合,而是可变字体

可变字体不包含多个离散字体(如在集合中),而是包含单个字体,其中包含描述字形轮廓可以变化的方式的数据,以及对设计可以变化的设计空间的描述. 例如,可变字体可能支持跨设计空间的变化,其中一个轴的权重为 300 到 700(例如),第二个轴的宽度为 75 到 150(例如)。设计空间内的每个点都是一个“实例”。可变字体还可以有一组命名实例,它们是设计空间内的实例,字体设计者为其提供了特定的样式名称。

在 Windows 字体预览器中,当它在顶部显示“OpenType Font Variations”时,“上一个”和“下一个”按钮将逐步浏览字体中的命名实例。

如果字体使用 TrueType 轮廓,则字体数据在“glyf”表中包含轮廓数据,就像在任何其他 TrueType 风格的字体中一样,但也包含在单独的“gvar”表中的增量数据。对于字形轮廓中的每个控制点,增量数据描述了在设计空间中的某些实例中,给定控制点如何从其默认位置移动。对于该实例和默认实例之间的其他实例,增量使用线性插值进行缩放。

因此,当显示文本时,会选择特定实例,并且光栅化器采用默认字形轮廓并使用“gvar”表中的增量数据将缩放增量应用于这些轮廓的控制点,并根据所选实例进行缩放.

(我只提到了应用于字形轮廓的增量。也可以将增量应用于字体中的其他数据,例如字体或字形度量、GPOS 表中的定位数据等)

鉴于此,您要问的不是从集合中提取单独的字体,而是如何导出可以通过选择特定实例然后应用所有缩放增量来导出的字体数据那个例子。

Windows 本身需要能够为打印或生成 PDF 等场景生成实例字体数据。不过,这是在内部完成的,并且没有输出实例字体数据的公共 API。

不过,有些工具可以导出派生的实例字体数据。例如,FontTools 中的实例模块支持这一点。


推荐阅读