OSX NSFont与Photoshop中完全相同的字体不同

时间:2015-02-04 09:55:14

标签: macos photoshop nsfont

我已经在Photoshop中将我的字体设置为2224的Helvetica Neue Regular - 无需任何其他自定义。

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

我使用

修改了我的NSTextField的字体
self.label.font = [NSFont fontWithName:@"HelveticaNeue" size:22];

我创建了HelveticaNeue(常规)和HelveticaNeue-Medium,Photoshop和OSX的比较。 似乎OSX部分总是更加大胆,字母间距略有缩小。

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

enter image description here

1 个答案:

答案 0 :(得分: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渲染字体的方式。仅仅因为两件事表面上呈现相同的字体,并不意味着它们会产生相同的像素。