【发布时间】:2018-11-29 03:44:19
【问题描述】:
如何缩放字体字形轮廓以匹配特定的磅值?
例如,我的 T 字形(Arial)的轮廓如下所示:
该字形的顶部两点位于 Y 坐标 1466 处。 根据微软的这个 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
这会使光栅化的图像看起来像这张图片中的右侧:
这里左边的字形是写字板中12pt T的截图,右边是我的光栅化的。
如您所见,我的不仅更小,而且模糊。这是因为它只有 8.589 像素高并且顶部像素介于两个像素之间。当我使用 96 DPI 作为目标设备 DPI 时,结果是 11.4531,我猜这是写字板所做的(pt vs px),但它仍然模糊,因为 11.45 仍然在两个像素之间。
我想知道,如何缩放字形轮廓以获得与写字板一样清晰的结果?有什么想法吗?
简单地将值四舍五入到全像素不是解决方案,因为这不适用于任何带有对角线的字形(例如 A)。在 WordPad 上看起来像色差的颜色来自 Windows 的 ClearType 功能,该功能使用 LCD 的“子像素”在对角线字形轮廓上获得更清晰的结果。我暂时不担心这些。
【问题讨论】:
-
仅网格拟合并不能解释您在“T”中看到的巨大差异。您声明您的“目标 DPI”是 72,但我敢打赌这不是您屏幕的实际 DPI(这是 Windows 正在使用的)。此外,ClearType 'T' also 模糊——仅与您自己的灰度“T”不同 模糊。但你是对的,网格拟合应该让你更接近。
标签: fonts truetype outline glyph