如何正确缩放字体字形轮廓?

时间:2018-06-20 05:34:29

标签: fonts true-type-fonts outline glyph

如何缩放字体字形轮廓以匹配特定的磅值?

例如,我有T字形(Arial)的轮廓,如下所示:

enter image description here

该字形的前两个点在Y坐标1466处。 根据Microsoft的TrueType文档: https://docs.microsoft.com/en-us/typography/opentype/spec/ttch01#scaling-a-glyph

我必须这样计算:

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

Arial的units_per_em是2048,我的目标DPI是72,而我想要的字体大小是12,所以如果我这样做,我会得到:

1466 * 12 * 72 /(72 * 2048)= 8.589

这将导致光栅化的图像看起来像这张图片中的右侧:

enter image description here

这里的左图示是写字板中12pt T的屏幕截图,右边是我的栅格化图。

如您所见,我的体积不仅变小,而且模糊。这是因为它只有8.589像素高,顶部像素在两个像素之间。当我使用96 DPI作为目标设备DPI时,结果是11.4531,我猜这就是写字板的功能(点对点),但是由于11.45仍在两个像素之间,因此它仍然很模糊。

我想知道,如何缩放字形轮廓以获得与写字板一样清晰的结果?有什么想法吗?

简单地将值四舍五入为完整像素不是解决方案,因为这不适用于带有对角线的任何字形(例如A)。看起来像写字板上的色差的颜色来自Windows的ClearType功能,该功能使用LCD的“子像素”在对角字形轮廓上获得更清晰的结果。我现在不担心这些。

1 个答案:

答案 0 :(得分:0)

在阅读了更多有关它的内容之后,我意识到TrueType具有一种解释器语言,可以使字形适合网格。所以我必须实现它:)