Chrome 字体偏淡的问题

开始这话提前得先稍微讲一下Windows字体渲染机制。

在Win Vista-7这段时间,Windows的核心渲染机制是ClearType这个RGB次像素级渲染机制。所谓次像素,就是通过exploit屏幕成像原理(同一个像素的RGB三种颜色并不是一个发光元素,而是并列的三个)来增强锐度。叫做次像素,是因为你实质上用了某个像素点A(比如某个字母中的一个像素)边上的另一个像素B的一部分(比如只用其中的R元素)来增强了像素A。当然这本质上还是俩整像素,只不过A还是纯黑,B是一个红点;但是从人眼看来,就只是增强了对比度的A(这只是个例子,具体选什么颜色,是要从感知学上出发的)。次像素级渲染除了增强对比度之外,还可以增加所谓的appreant分辨率,也是类似原理。更详细的文章可以参见维基百科

具体说来,又能分成RGB类型和灰度类型,RGB就是为了增强某种颜色,甚至可以产生其他颜色,比如这个NN放大600倍的图:

untitled-1

可以看到字虽然应该是纯黑的,但是添加了很多RGB级的杂色,缩小了看锐度就会很高,而且笔画之间也相对平滑(比起点阵字体)。

而灰度级就是负责增加锐度和平滑度的“次像素”只用灰度了,很好理解,就不上截图了。(其实我个人感觉纯灰度的平滑/锐化机制不能算“次像素”…毕竟并没有利用到“次像素”的单元。不过算是约定俗成的叫法,就姑且这么叫了。)

Windows的ClearType一直是在RGB次像素渲染这个阵营的,与之相对,苹果的OS X一直是用灰度级。RGB次像素渲染的优点是锐度可以达到更高,但是会有不自然、平滑度不够的一些问题。其实就是一个取舍。

但是,RGB次像素渲染有个特点:和像素点的排列方式有关。如果像素的排列方式变了,锐化出来的效果就非常惨。因此,在Windows控制面板里,你其实是可以设置像素的排列顺序的。那么这就牵扯到一个问题:对于方向固定的显示器还好,对于经常需要旋转的手持设备,这是一个巨大的缺点:你总不能每次用户旋转屏幕之后,就重新刷新一下渲染设置吧?这也是为什么无论是iOS还是Android,都只有灰度的次像素级渲染。

screenshot_20170122-063529
Android 7.1 的字体渲染,放大500%倍

Windows从8开始,开始走手提设备和Desktop一体化,尤其是推出了许多官方的第三方的Tablet产品。为了应对上述的旋转问题,微软又不声不响地启用了另外一套字体渲染机制——没错,就是只有灰度级的次像素渲染。至于这个机制是否还叫ClearType,我也说不清楚,不过这个不重要。下面为了区分,我们就把带RGB的叫ClearType,不带RGB的叫做Win8+新机制。

在Win 8起的Windows中,只有部分桌面应用才会默认启用ClearType;而系统UI、Metro应用、甚至包括一些微软家的桌面应用(例如IE、Edge、Office从2013起)都完全弃用了ClearType而转用Win8+新机制。所以,在研究ClearType时千万要小心,不要误用了这些程序做范例,那是完全不同的机制。

不过,大多数第三方应用,包括Chrome和Firefox,仍然使用ClearType。所以,这个不管是Win 7 还是Win 10都一样。但是,同样是ClearType,Chrome的比起Firefox一直有偏淡的问题,相信眼尖的朋友早就发现了。

这个问题不知为何在Win 8/10下的宋体上变得更为明显(不知道是渲染机制的调整所致还是微软修改了宋体,我倾向于后者),几乎已经处于无法接受的范围。(手头没Win 10,回头补个图。)

之前在bug tracker各种场合提过多次一直未能得到关注,于是后来我自己file了一个:issue 534732。可算有了一定的关注度。

不过一直没人修或者回应,直到前几个月,才有人提出:Chrome没错(和Windows字体查看器里的效果一致),错的是Firefox。我看了下他的示意图,也自己试了下,倒也没说错;确实是Chrome的和Windows字条查看器更接近。不过,这(在我个人看来)不能反驳Firefox的效果更好的事实。

直到今天,终于事情有了进展。 lwchkg@chromium.org细心地发现,其实Firefox偷偷调整了一个ClearType的参数——enhanced contrast。从默认的0.5调整到了1。最搞笑的是,在Firefox设置相关的代码的注释中明明默认值还说是50(或0.5),但是实际实现代码中默认值却是1。

所以事情其实就是这么简单——Firefox和Chrome两者有不同的对比度增强参数而已。这位用户也同意1的效果更好。考虑到他是chromium计划的开发者,希望在不久的将来,Chrome也能做出更改吧!

 

 

Advertisements

一个有关“Chrome 字体偏淡的问题”的想法

  1. 我自己比较喜欢浓眉大眼高对比度,所以我保留了Firefox默认勾选的硬件加速,把字体渲染ClearType的参数enhanced contrast设置成了1000最高,rendering mode设置成了5 Natural Symmetric,感觉特别爽!(结果现在只要用Chrome就感觉淡得不得了……)
    不过我感觉对字体渲染提升最大的还是换高分屏,观感提升一个档次233

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s