这里要理解的一个关键单位是 em。它在您在字体设计工具中看到的轮廓单位与用于光栅化字形的像素数之间建立了联系。
OpenType / TrueType 字体中的字形轮廓是在网格上设计的,设计者在字体范围内设置该网格的大小。网格设置为一定数量的字体设计单位per em (UPM)。因此,例如,字体设计者可能会指定每个 em 1000 个字体单位,或者每个 em 2048 个字体单位。该值存储在字体中。
请注意,这并不能确定字形的大小。假设一个字体是使用 2048 个单位/em 创建的。像“X”这样的字符的字形可能是从下到上 1000 个单位,也可能是从下到上 3000 个单位。每个 em 的单位不限制可以使用的网格的总大小或网格内轮廓的大小。
当您在文本编辑器、文字处理应用程序或桌面出版应用程序(例如记事本、Word、Pagemaker)中设置文本大小时,该应用程序通常会使用“点”单位。打印机点是一个物理单位,大约为 1/72 英寸;在数字类型中,一个点正好是 1/72 英寸。但是当您选择文本大小时,您实际设置的是 points per em。
所以,假设一个字体被设计成每个 em 有 1000 个字体设计单位的网格;并假设在应用程序中文本大小设置为 18 磅(每 em)。 18 点是 0.25";所以 em 的 1000 个设计单位对应 0.25"。或者,如果文字大小设置为 144 磅,则 em 的 1000 个设计单位对应 2"。
您问题的另一个重要因素是多少显示像素对应于“英寸”。至少,实际显示器的物理像素密度是其中的一部分——每物理英寸的像素数。但另一个因素可能是主机操作系统应用的缩放比例,这可能取决于显示器的外形尺寸和预期的观看距离。例如,27 英寸 4K 桌面显示器很可能在不到 2 英尺的距离内观看;在 55 英寸 4K 电视上显示时,内容将在 10 英尺左右的距离内观看。电视的像素密度约为台式显示器的一半,但典型的观看距离更像是距离的五倍。因此,在确定内容的逻辑英寸与显示器上的物理英寸之间的关系时,所有这些都会被考虑在内。
更复杂的是,该软件可能具有与显示物理像素不同的像素的逻辑概念。可以体现这一点的一种方式是软件中的“显示分辨率”设置。因此,例如,LCD 显示器的物理像素分辨率可能为 1920 x 1024,但软件可能设置为假定分辨率为 1024 x 768。(当然,对于该配置,应用程序将假定 1024 x 768 显示,但是每个像素的内容都需要以某种方式映射到物理像素上。可能有不同的管理方式。)
最终,重要的是软件假设,逻辑上是显示器的尺寸(以像素为单位)和每“英寸”的像素数 (PPI)。在字体光栅化器中设置的是 pixels per em。设计师的轮廓会根据假定的每 em 像素 (PPEM) 缩放到网格上。
所以:
- 设计师为每个 em 设置字体设计单位
- 应用程序以每 em 点数为单位设置文本大小
- 72 分/em
- 操作系统(或驱动显示器的任何软件)假定每英寸有一定数量的像素
还有:
ppem 像素/em
= (文本大小 pts / em) * (1 英寸 / 72 pts) * (逻辑 ppi 像素 / 英寸)
= (文本大小 * 逻辑 ppi / 72) 像素 / em
现在,如果您查看字形轮廓数据中某些特征的大小,您可以使用上述因素,从设计单位中的特征大小到(逻辑)像素中的特征大小。
(特征大小单位)*(1 em / font-upm 单位)*(ppem 像素/em)
= (feature-size * ppem / font-upm) 像素
因此,例如,如果文本大小为 12 pts,ppi 为 120,则意味着 ppem 为 20 像素/em。然后,假设字体的 UPM 为 1000,“X”的轮廓高度为 600 个单位。以像素为单位,“X”字形将为 (600 * 20 / 1000 =) 12 像素高。