为什么字体有时在 Mac OS X 上看起来很“胖”?

jti*_*man 20 fonts display macos

有时从挂起状态恢复时,Mac OS X 中的字体看起来比正常情况下“胖”。不幸的是,现在我无法让我的 Macbook Pro 表现出“正常”行为进行比较,昨天和今天都异常。如果我能得到我认为“正常”的截图,我会添加它们。

“修复”这是随机的。我使用外接显示器,有时将其拔下并重新插入,甚至关闭并重新打开都有效。有时在连接(或未连接)显示器的情况下检测显示器工作。有时需要完全退出或重新启动。

使用的显示器:

  • Macbook Pro 15" 内置显示屏
  • 戴尔 27" LCD(2009 型号)

我看到这种情况发生的软件,至少最明显的是:

我使用的是 Mac OS X 10.5.8。

MacIrssi 与 Inconsolata 16 pt 的“异常”视图。

异常 (Macirssi)

来自 Firefox 的“异常”视图。

异常(火狐)

终于让它切换回来,虽然在从挂起恢复到“胖”之后:-(。

正常 (Macirssi)

和 Firefox 中的“正常”:

正常(火狐)

Bri*_*ell 23

当您放大图像时,问题变得明显:

放大“胖”字体的屏幕截图,显示彩色像素
放大“瘦”字体的屏幕截图,显示灰度像素

正如你所看到的,瘦版是完全灰度的,而胖版有一些略带红色的像素,还有一些略带蓝色的像素。

这是因为子像素抗锯齿。LCD 屏幕实际上并不包含可以是任何颜色的方形像素;相反,它具有三个细长的矩形元素,分别是红色、绿色和蓝色。(以下图片来自维基百科)。

各种显示器上的像素图案

使用抗锯齿字体时,您可以改变三种颜色中每一种的强度,而不是简单地使用灰色阴影,从而以三倍的水平分辨率进行渲染,您只需使用灰色阴影进行抗锯齿即可实现。我提供的放大图片实际上并不代表您所看到的;相反,由于像素的形状和位置,字体看起来应该相当平滑。像这样渲染它会更准确:

子像素抗锯齿文本示例

所以,你看到的是,有时字体是用亚像素抗锯齿渲染的,有时它是用普通抗锯齿渲染的。我猜想使用的亚像素抗锯齿算法针对白底黑字进行了优化,这可以解释为什么当在黑底白字中查看时,文本看起来有点“胖”。

另一方面,它可能只是对实际字体的更准确呈现。如果您查看相同字体的适当放大版本,它看起来比上面显示的“瘦”版本更大胆且不那么纤细:

较大字体大小的示例文本

它在两个版本之间来回切换的原因可能是因为您的第二台显示器。我不知道操作系统何时决定这一点,也不知道它是如何决定的,但它可能会检测到具有未知子像素布局的 LCD。因为它不知道像素的布局,所以它采用更安全的标准抗锯齿(因为子像素抗锯齿在布局错误的 LCD 上显示时看起来非常奇怪)。似乎不知何故,你有时让它做出一个决定,有时让它做出另一个决定。我相信一旦应用程序以某种渲染模式启动,它不会改变,直到您退出并重新启动应用程序,这可以解释为什么您会看到不稳定的行为;

如果您只是想在所有应用程序中保持一致,无论您是否使用第二个 LCD,并且始终使用瘦字体,您只需在外观系统首选项面板中关闭字体平滑:

在外观系统首选项面板中突出显示“可用时使用 LCD 字体平滑”

当然,那么你到处都失去了亚像素抗锯齿。正如 John Rudy 指出的那样,您可以按照使用defaults程序手动设置级别的说明进行更细粒度的控制;或者,如果您还没有使用 Snow Leopard,那么您应该仍然可以在系统偏好设置中使用更精细的控件。


Joh*_*udy 12

它看起来像抗锯齿的差异,如果您在挂起/恢复和外部监视器连接/断开连接时看到这种行为,这可能是有意义的。可能是您的戴尔显示器触发了系统使用的抗锯齿模式的更改。

根据您的 Mac OS X 版本,您可能有选项来控制系统在外观系统首选项窗口中使用的字体平滑。(从 Snow Leopard 开始,我只看到一个复选框“在可用时使用 LCD 字体平滑。”这似乎对应于旧的“自动 - 最适合主显示器”设置。)

您仍然可以通过 Terminal.app 中的系统属性进行配置。这篇文章解释了细节,我将在下面总结:

字体平滑有五种设置:

  1. 自动 - 最适合主显示器
  2. 标准 - 最适合 CRT(选项1
  3. 光(选项2
  4. 中 - 最适合平板(选项3
  5. 强(选项4

要严格控制这一点,使您不再处于自动世界中,请使用 Terminal.app 在系统范围内更改属性。我怀疑如果您这样做,显示切换(在监视器之间,我怀疑您的屏幕保护程序可能用于挂起/恢复)不应再干扰您的设置。

在 Terminal.app 中,输入:

    defaults -currentHost write -globalDomain AppleFontSmoothing -int 2
Run Code Online (Sandbox Code Playgroud)

将 更改为2您最喜欢的选项(从上面的列表中,在文本后使用选项编号)。

  • @jtimberman,至于*我使用 iTerm,而不是 Terminal.app* 请注意,John 给出的命令仅对终端没有影响。您也可以使用 iTerm 来运行它。 (2认同)