【问题标题】:How to properly scale a font glyph outline?如何正确缩放字体字形轮廓?
【发布时间】: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


【解决方案1】:

在阅读了更多关于它的信息后,我意识到 TrueType 有一种解释器语言来网格适合字形。所以我必须实现它:)

【讨论】:

    猜你喜欢
    • 2021-10-15
    • 2014-10-03
    • 1970-01-01
    • 2020-09-10
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    相关资源
    最近更新 更多