0

我在 Photoshop 中将我的字体设置为 Helvetica Neue Regular 22pt - 没有任何额外的自定义。

现在我需要在我的 OSX 应用程序中得到完全相同的结果,这似乎很难实现。

我使用修改我的 NSTextField 的字体

self.label.font = [NSFont fontWithName:@"HelveticaNeue" size:22];

我创建了 HelveticaNeue(regular) 和 HelveticaNeue-Medium、Photoshop 和 OSX 的比较。似乎 OSX 部分总是更粗体,并且字母间距略有减小。

可能会玩一段时间并使用 NSAttribuedString 在 OSX 上调整字体,直到它与 Photoshop 字体匹配,但这真的有必要吗?字体不应该完全一样吗?

在此处输入图像描述

4

1 回答 1

0

有很多方法可以渲染字体。显然,Photoshop 有自己的字体渲染引擎,它与NSTextField默认情况下不同。

如果您放大图像大小(以不尝试使结果平滑的方式),您会看到 Photoshop 渲染使用灰度抗锯齿,而 OS X 渲染使用亚像素抗锯齿. OS X 渲染有彩色条纹。当以正常尺寸渲染时,这些颜色最终会照亮 LCD 屏幕中的不同 RGB 元素。与其看起来是彩色的,不如说它看起来像是亮度的变化。基本上,子像素抗锯齿使用 LCD 像素内的颜色元素布局来提高其可以渲染的分辨率。

我还怀疑 OS X 渲染引擎正在使用亚像素字形定位。这允许字形的大小和间距更接近字体的规定,在渲染到像素网格时做出更小的妥协。例如,看第一行(Helvetica Neue 22pt: Photoshop)。“H”和“e”之间以及“l”和“v”之间的间距在我看来是错误的。OS X 在我看来更好看。

如果您自己渲染文本,您可以使用 关闭子像素抗锯齿CGContextSetShouldSubpixelQuantizeFonts()并使用 关闭子像素定位CGContextSetShouldSubpixelPositionFonts()。(文档建议关闭子像素定位也会关闭子像素抗锯齿,尽管我不确定为什么会这样。)看看这是否产生更像 Photoshop 给你的结果。

顺便说一句,也可以调整 Photoshop 渲染字体的方式。仅仅因为两个东西表面上呈现相同的字体,并不意味着它们会产生相同的像素。

于 2015-02-04T10:32:23.560 回答