真型字体缩放

时间:2018-09-07 06:47:14

标签: true-type-fonts

MSDN的truetype字体文章(https://docs.microsoft.com/en-us/typography/opentype/otspec160/ttch01)为将FUnit转换为像素提供了以下内容:

  

将em平方中的值乘以比例将其转换为像素坐标系中的值。这个比例是:

     

pointSize *分辨率/(每英寸72点* units_per_em)

     

其中pointSize是要显示字形的大小,而resolution是输出设备的分辨率。分母中的72表示每英寸的点数。

     

例如,假设在72 dpi屏幕上18点时字形特征的长度为550 FUnit。每个em有2048个单位。通过以下计算可知,该特征的长度为4.83像素。

     

550 * 18 * 72 /(72 * 2048)= 4.83

问题:

  1. 它说:“ pointSize是显示字形的大小。”一个如何计算它,以及它的单位是什么?
  2. 它说“分辨率是输出设备的分辨率”。这是DPI吗?我从哪里可以得到这些信息?
  3. 它说:“分母中的72表示每英寸的点数。”这与DPI有关吗?
  4. 在示例中,其显示为“ 18点”。这18是用于计算分辨率还是pointSize?

不幸的是,Apple的文档或多或少都是相同的,除了除了阅读stb_truetype的源代码外几乎没有其他资源。

1 个答案:

答案 0 :(得分:1)

  

它说:“ pointSize是显示字形的大小。”一个如何计算它,以及它的单位是什么?

您无需计算磅值,而是对其进行设置。这是您要显示字体的标称大小(请考虑使用文本编辑器中的字体菜单)。 “磅数”是传统的印刷测量系统,“磅数”约为1/72英寸。这带来了另一个问题:

  

它说:“分母中的72表示每英寸的点数。”这与DPI有关吗?

不。同样,这些是印刷点-用来设置点大小的单位。这就是为什么它首先成为分母的一部分:点大小以72点至英寸的测量系统表示,并且在某种程度上必须在方程式中加以考虑。

现在,印刷点与输出设备的点或像素不同。尽管在桌面发布的初期,通常每英寸72像素的屏幕分辨率确实与每英寸72点的印刷系统相对应(绝非偶然),但是如今这些输出分辨率当然会有所不同非常重要,因此请务必牢记 point pixel 的区别。

  

在示例中,其显示为“ 18点”。这18是用于计算分辨率还是pointSize?

都不是。 点的大小;往上看。整个示例可以翻译如下。使用基于每em 2048个单位的字体,如果特定字形特征的长度为550 em单位,并且字形在屏幕分辨率为72的设备上以18点的大小(即18/72英寸)显示。每英寸像素数,该功能的像素大小将为4.84。

  

它说“分辨率是输出设备的分辨率”。这是DPI吗?我从哪里可以得到这些信息?

是DPI / PPI,是的。您必须查询一些系统API来获取该信息,或者如果要定位到特定设备,则只需硬编码该值即可。