在 Windows 上基于 Chromium 的浏览器中改进了文本渲染

Kurt Catti-Schmidt
Kurt Catti-Schmidt
Patrick Brosset
Patrick Brosset

发布时间:2025 年 2 月 12 日

Web 呈现引擎的工作量非常大,其中许多工作(例如样式、媒体或布局)都由标准驱动。这些标准可确保独立引擎能够互操作,这使得 Web 蓬勃发展。 但一些更精细的细节(例如如何在像素级呈现文本)通常由标准机构来解释,并且通常最终依赖于浏览器运行的操作系统。

2020 年,Microsoft Edge 迎来了一个难得的机会,即彻底替换其底层呈现引擎。 Edge 从仅限 Windows 的平台(直接使用 Windows API)过渡到 Chromium, 并成为真正的跨平台 Web 呈现器。在切换到 Chromium 之前,Edge 完全依赖于名为 DirectWrite 的 Windows API 进行文本呈现。不过,Chromium 依赖于 Skia,这是一个 功能强大且灵活的跨平台图形引擎,它从其 API 中抽象出了许多 操作系统特定的代码。

在 Edge 过渡到 Chromium 的过程中,Edge 团队有机会从用户那里收集有关 Chromium 呈现引擎的反馈。其中一条反馈非常重要:许多 Edge 用户表示,文本看起来“褪色”,并且与其他 Windows 部分中的文本看起来不一致。

在 Windows 132 之前的 Chrome 版本中,文字看起来显得褪色。

该团队认真对待此反馈并进行了一些调查。虽然 Skia 在 Windows 上使用 DirectWrite 来实现某些功能(例如字体查找),但最终的文本栅格化实际上是由 Skia 直接处理的。用户反馈“褪色”的一个主要因素是文本呈现的内部对比度和伽玛设置。

在 Edge 基于 Chromium 的引擎与其之前的引擎之间,发现了文本对比度和伽玛值的两个主要差异。首先,Skia 不会从 Windows ClearType Tuner中获取文本对比度和伽玛值。 其次,它使用的文本对比度和伽玛默认值与 Edge 基于 DirectWrite 的文本堆栈所使用的值不同。

去年,Edge 团队直接在 Chromium 中添加了对尊重 ClearType Tuner 值的支持。这让基于 Chromium 的浏览器用户能够控制 Windows 上的文本对比度和伽玛设置。虽然这是朝着正确方向迈出的重要一步,但大多数用户往往不会调整其系统范围的文本对比度和灰度系数设置。因此,此历程的下一阶段是认真考虑调整 Web 和浏览器界面文本内容的默认文本对比度和伽玛设置。

更改 Web 上的文本外观是一项庞大的工程。Web 一直以文本为主,因此需要高质量的文本引擎。很明显,文本对比度值需要增加,但需要数据来确定要调整多少。

Edge 团队早在 2021 年就开始尝试各种文本对比度值。经过大量用户研究后,Edge 和 Chromium 的成员都确定,对比度值为 1.0 与预 Chromium Edge 的文本呈现非常接近,并且与其他原生 Windows 应用相比看起来一致。

在 Edge 团队中,我们认为我们的研究和实验可能对 Windows 上的整个 Chromium 社区有益,因此我们与 Google 的 Chrome 团队分享了我们的发现,他们通过自己的实验证实了这些发现。然后,我们开始为 Windows build 默认启用新的对比度值,从 Chrome 132 开始。

如今,Windows 上所有基于 Chromium 的浏览器的用户都可以受益于过去几年的共享研究、实验和实现。

切换后,文字看起来清晰明快。

特别感谢 Microsoft 的 Ian Prest、Daniel Libby 和 Alison Maher,以及 Google 的 Dominik Röttsches、David Yeung、Ben Wagner 和 Brian Osman 对此项目的贡献!