沨沄极客

如何在 Windows 上享受更棒的字体渲染  | 实用技巧

前段时间,一直使用 Mac 的 @Yves 老师希望在 Windows 上修改字体,跟我讨论了好一会儿 Windows 的字体渲染问题,他向我吐槽「也没个讲得清楚的教程」。确实,Windows 的字体渲染问题一直是一个老大难,每隔一段时间就会有人吐槽 Windows 的字体有多难看、macOS 的字体又有多美观。

和 @Yves 老师讨论

实际上,微软在这方面并非毫无作为,而是进行过多次优化。但由于软硬件上的种种限制,让广大群众至今没能真正享受到高质量的字体渲染效果。

今天就让我来带大家仔细讲讲 Windows 的字体渲染为什么这么差,以及如何用稳定的方法解决字体渲染问题

Windows 的字体渲染问题出在哪里?

长期使用 macOS 的用户可能无法理解 Windows 用户到底在发什么牢骚。

为了有一个直观的感受,我在 Windows 和 macOS 中各截取了一些文字。对比一下下面这两段文字,就会发现它们的实际观感区别很大。

macOS 下的字体

将 macOS 下的文字放大后观察,字体美观、边缘厚实,一笔一划很是清晰。

Windows 10 下的字体

Windows 的字体只能算是能够看清,但边缘总有些发虚,对比之后则略逊一筹。放大后观察,边缘有一些红绿小色块,「安」字中间的一横显得颜色很深,整体多少有些不协调。

而出现这种情况的原因有很多,我总结了以下 3 点——

屏幕显示分辨率低

屏幕的显示分辨率是首当其冲的问题。

为了描述这个问题是怎么出现的,除了屏幕本身的分辨率和尺寸之外,我们还需要了解显示器的一个重要参数:PPI(Pixels Per Inch),指的是「每英寸的像素数量」。

我们可以用一个公式来计算出屏幕的 PPI:√(纵向像素数² + 横向像素数²) / 屏幕尺寸

PPI 计算公式

比如一块 1920 x 1080 的 15.6 寸显示器,它的 PPI 就是 √(1920² + 1080²) / 15.6 = 141.21。从这个公式中可以看出「同等分辨率的屏幕越大,PPI 就越低」。

如果我们想在屏幕上显示文字,就需要在像素点阵中填充内容。比如你想在 12 x 12 的点阵下塞进一个中文汉字,只用黑白两色填充就只能得到图中的点阵文字。只有换成一个更大的点阵,笔画之间才会有空间填充更多的笔画细节,从而使笔画之间变得更为顺滑。

点阵字体

近些年出产的 Mac 都配备上了 Retina 屏幕,分辨率从 2560 x 1600 到最高的 5120 x 2880 不等,PPI 可以达到 227。实际使用时,macOS 通常会采用缩放,让一块高分辨率的屏幕显示更多的内容,文字自然会变得更加清晰。

而 Windows 方面,仍然有大量的电脑在使用 1920 x 1080 的分辨率和更低分辨率的显示器,大多数万元以下的笔记本配备的也是 1080P 甚至是 1366 x 768 的显示器。一块 15.6 寸的 1080P 屏幕,PPI 只能达到 141 上下。相比高 PPI 的 Mac,Windows 的文字显示自然比不过它。

不同 PPI 下,文字的显示效果对比

所以,屏幕分辨率属于 Mac 天然的硬件优势。

字体问题

第二个问题在于字体。 字体的字形不同,也会影响字体的显示效果。

比如在 Word 中使用四号宋体,边缘会显得模糊,而小四、五号等字号时,边缘则十分锐利。即使直接在 Word 中使用苹方字体,边缘也会出现一定的模糊。

不同的字号表现

这种进行模糊处理的方式,其实是 Windows 对于低分辨率屏幕下字体显示进行的特殊处理:Hint。每个字体本身会带有一个 GASP 表,Windows 的渲染引擎会根据这些 GASP 表来判断是否需要做处理。

当屏幕分辨率过低或是字太小,不足以显示所有文字细节时,Windows 就会启动 Hint 让文字变得更清晰,这本来是一件好事。

Hint 的误判

然而如果字体的 GASP 表不完善,就会让 Hint 误操作,本来就是可以正常显示字体的高分屏,但经过 Hint 处理过后,原本清晰的字体反而变得模糊、笔画高低不平了,这就是字体本身的问题。

这个问题曾出现在 Windows 的默认字体微软雅黑上。如今最新版的 Windows 10 中内置的微软雅黑已经进行过优化,比以前要好很多了。

渲染方式问题

如果排除上面两个因素,最后的问题就是系统的文字渲染方式了。

粗略地讲,Windows 目前采用三种不同的渲染方式,它们之间是相互补充的关系,同时存在于系统中。

  • GDI+(Graphical Device Interface):GDI 渲染指的是图形设备接口,属于 Windows 的核心组件之一。GDI 的历史很悠久,许多年迈的 Win32 软件都采用 GDI 来渲染字体。GDI+ 是它的改进版。
  • ClearType:为了提升 LCD 屏幕的字体渲染效果而推出的改进功能,也是目前 Win 10 主要采用的字体渲染方式。准确地讲这并不是渲染引擎,称为字符平滑工具、抗锯齿功能更为合适。
  • DirectWrite:为了提升高分辨率屏幕的字体渲染做的优化引擎。需要开发者做支持,全面进入 DirectWrite 时代还需经历时日。目前主要是 UWP 应用在使用。

其中的传统字体渲染引擎 GDI 很老,采用 GDI 的 Win32 软件在高分辨率屏幕下使用 100% 之外的缩放就会出现模糊。但由于采用 GDI 的软件实在太多,牵一发而动全身,微软无法轻易换掉 GDI

于是 ClearType 便应运而生。ClearType 的原理是让显示器的 R , G , B 次像素放光,在 x 和 y 轴上增加一些颜色进行微调,使得文字更清晰。

将采用 ClearType 的字体放大 6 倍 / 来自 Wikipedia

不过这尚未真正解决问题,在 Windows 10 默认启用 ClearType 的情况下,文字表现依然不佳。最前面的对比图中,Windows 的文字边缘就有这种红绿小色块的身影。在低分屏下,这种小色块会让文字边缘显得「有些糊」,中文的笔画也会有深有浅。

于是微软又推出了新的 DirectWrite 引擎,它就是为了取代 GDI 和 GDI+ 而诞生的。它的渲染方式已经和 iOS、Android 上采用的 FreeType 引擎效果接近,只是我们日常用的许多老软件未做适配。所以这也是为什么 UWP 应用的字体渲染会比 Win32 软件看起来要好一些的原因。

字体渲染方式

如果做一个形象的比喻,那么 GDI 就是年迈的老人,ClearType 就是一副眼镜,DirectWrite 则是更能干的接班人。

可以发现,字体渲染方式的问题其实是多方面的,根源就在于 GDI 的老旧、ClearType 的不完善、软件不跟进 DirectWrite 这些问题上。这几个渲染方式会影响到优化时的一些操作,我们后面还会提到。

如何搞定渲染

了解字体渲染效果差的原因之后,我们可以发现 Windows 的字体渲染问题还不少,这些问题可以有很多种解决方法,括号中是解法的简单概括——

  • 显示器分辨率过低(更换硬件)
  • 老软件适配差(Win32 应用、单独调整)
  • 字体本身产生模糊(更换字体、修改字体本身)
  • 字体丑,想换字体(更换字体)
  • 渲染时产生的模糊(更换渲染引擎)
字体渲染的几大问题

明确了问题和产生问题的原因,那我们就根据这几个问题来分别做出对应的优化。

下面我从简单到复杂,介绍多种优化字体渲染的方法。由于没有人会愿意因为美观而舍弃系统的稳定性,所以在下列方法中,不会出现改动注册表、手动修改系统文件的方法,稳定性 永远是第一要素。

解决显示器分辨率过低、老软件适配差问题

其中显示器分辨率属于硬件问题,想一劳永逸地解决问题,可以选择购置 2K 分辨率以上的显示器,Windows 在高分屏上的字体渲染表现不俗。然而,考虑到 2K 显示器「同样不俗」的价格,大部分人还是会选择在现有的硬件资源上进行软件优化。

如果想在现有的硬件上做优化,最简单最安全的方法自然是 Windows 内置的方案了。

直接修改缩放

在 Windows 中提供了一个简单的「缩放功能」来放大系统的界面。它的效果是让一个文字获得更多的像素点。从而获得更好的视觉体验。

在「设置 - 系统 - 显示 - 缩放与布局」中调整「更改文本、应用等项目的大小」,从 100% 到 200% 不等。这些选项中 Windows 会给出一个推荐选项,可以选择适当提升一档。

缩放功能

如果你觉得 200% 的缩放仍然不够,「高级缩放设置」中允许你调整到 100% - 500% 之间的任意数字。不过一般不建议改动这一项。

修改单个应用的缩放

不过调整缩放之后,会让一些对 DPI 缩放支持较差的老应用出现严重模糊,像是老版本的迅雷、QQ 等软件。这时候可以单独调整应用的缩放。

进入应用的「属性」

在软件的快捷方式上右键,打开属性菜单。如果是在任务栏上的软件,「右键图标 - 右键菜单中的名称 - 属性」就可以进入属性设置界面。

然后在「兼容性」选项卡中,选择「更改高 DPI 设置」,选中「替代高 DPI 的缩放行为」。其中的 应用程序 指的是让软件保持 100% ,系统 指的是根据系统设置的缩放比例来调整(可能会变得模糊),系统(增强) 会对那些基于 GDI 渲染方式的软件进行更多的优化。

所以如果遇到了上面的问题,你可以选择使用 应用程序 或是 系统(增强) 来做一些特殊调整。

修改单个应用的缩放

修改字体大小

如果你目前正在使用的就是高分辨率的屏幕,反而觉得有些字太小、看不清。又不想调整所有界面的缩放,那就可以根据需要单独调整文字的大小。

在「设置 - 轻松使用 - 显示 - 放大文本」中调整滑块,然后选择「应用」。

之后电脑会进入半分钟左右的等待时间,结束后,Windows 中的所有文字都会被放大一些,文字的观感也会有所提升。

调整字体大小

这三种方法都是 Windows 内置的方法,经过简单且安全的操作,就可以让我们在分辨率稍低的显示器上获得较好的文字观感。同时解决了一部分老软件的适配问题。

解决字体本身产生的问题

如果调整了屏幕缩放,文字依然模糊。那就需要解决字体问题了。替换字体有两种思路:

  1. 更换字体:用别的字体作为默认字体。 对系统造成的破坏最小,随时可以改回来。
  2. 修改字体:对默认的微软雅黑进行处理。 对微软雅黑进行处理,让它获得更好的视觉效果。

全局更换字体的简单方法

更换系统字体有许多方法,小软件、小工具也不少。这里推荐一个来自日本开发者的「全局字体更换」开源小工具:noMeiryoUI,noMeiryoUI 的特点是针对亚洲字符集字体做了优化。软件可以在 Github 链接 下载。

noMeiryoUI 的操作和使用都非常简单。你只需要事先找到并安装一个适合日常使用的字体,要避免选择缺胳膊少腿的字体,以免改完后出现许多 □ □ □

用 noMeiryoUI 替换字体

然后就像在编辑器里修改字体一样,点击 Select... 直接指定系统全局所用的字体和字号大小。选择字体时,同一个字体可能会有多种字符集(简体、繁体、日语等),这在 noMeiryoUI 中可以单独选择。当然也可以分别对标题栏、图标、调色板标题、提示、消息框、菜单的字体和字号进行单独设置。

然后选择 Set All 就可以替换完成。

用 noMeiryoUI 替换所有字体

经过 noMeiryoUI 替换字体后,大部分 Win32 软件(包括系统软件在内)改变默认的字体和字号。noMeiryoUI 无需开在后台,一次替换就能长期使用。

为了展现替换效果,我选择了和系统字体差别明显的幼圆字体。软件中采用 DirectWrite 渲染的部分文字是无法替换的,菜单则被完整替换了。

幼圆效果展示

修复字体 Hint 模糊的方法

字体模糊的情况通常在采用 125% - 200% 缩放比例的情况下发生。所以修复微软雅黑、宋体等系统默认字体本身产生的模糊,也是一个可行的方案。

上面讲到由于错误的 GASP 信息产生了不正确的 Hint,那么禁用 Hint 就能让文字变得更锐利一些。在这篇 @HydricAcid 的 《修正 Gasp 表来去除字体 Hint 的教程》 中进行了详细的解释,采用的是极限社区的 @RadarNyan 提供的「去除所有 DPI 下的 Hint」方案。

大致的思路是:使用批处理脚本处理系统默认字体的 GASP 信息、进入命令行模式(解除字体占用)、将处理后的字体覆盖原字体。

这个操作与换一个字体作为系统字体不同,它会修改并替换系统字体文件本身,在未做备份的情况下替换字体可能会产生一些不可预料的后果(字体显示问题、蓝屏等)。所以安全性和兼容性比较一般,不是很推荐。不过它可以解决 DirectWrite 模式下的 Hint 模糊问题,需要的读者可以进入该链接按步骤操作。

解决渲染时产生的模糊

如果调整缩放、修改字体都没有缓解字体模糊,就需要采取一些其他手段来解决字体渲染引擎产生的模糊。

更换系统字体渲染引擎:MacType

更改字体渲染引擎是一个庞大的工程,只要是有文字的地方就会用到字体渲染,牵一发而动全身,不得不慎重。

Windows 上表现出色的字体渲染软件是 MacType,它可以帮助改善 Windows 中基于 GDI 的字体渲染,并支持热替换系统的默认宋体。你可以在它的 Github 链接 下载到 Beta 版本。

MacType 的加载方式

下载并安装后,MacType 会进入一个用户向导界面,你可以自主选择 MacType 的加载方式。

MacType 的渲染方式

这几种加载方式的优缺点已经在软件界面中详细说明,如果要概括一下:

  • 注册表加载:体验最好,开关需要重启系统。
  • 服务加载:平滑度较高,开关需要使用服务管理器。
  • 不使用自动加载:拖动到图标上加载,可以只针对特定渲染效果较差的软件修改。
  • MacTray 托盘独立加载:可以单独设置一些应用是否渲染。
  • MacTray 托盘兼容加载:兼容性最好。

如果想要全局使用,我个人比较推荐服务加载,软件不会影响到注册表,停用时比较方便。

如果只是想针对个别软件进行字体优化,则推荐 MacTray 托盘独立加载

这些加载方式各有优缺点,大家可以衡量一下自己对于美观度和稳定性的要求,来选择最适合自己的方法。

MacType 的配置文件

如果你不想做过多的配置,直接使用第二步中预设的默认配置文件,点击完成就配置完毕了。如果对这个配置的渲染效果不满意,可以多试几个,也可以自行配置文件。在网络上也有不少 MacType 相关的字体和配置文件。

MacType 的配置文件

不过 MacType 的功效仍然是有限的,它不支持采用 DirectWrite 字体引擎的软件(主要是 UWP 应用)。你需要做更多的配置才能实现。在这篇 @Weiyi_Kong 的 《用 MacType 拯救你的 Windows 字体 | 一日一技》 中,对于如何用 MacType 来修改 UWP 字体有详细的介绍。

由于需要手动修改 C:\Windows\System32 目录下的 EasyHK32.dll 文件,这里不再展开讲解。有兴趣的读者可以移步这篇文章进行更多研究。

MacType 的其他注意事项

尽管 MacType 的效果已是十分喜人,但它作为第三方软件,仍然不可避免地出现一些问题。

它的兼容性一般,它在大部分情况下都能正常运作,但在部分软件、游戏、驱动程序中会出现错误的文字渲染,比如一整行文字挤在一起。如果追求工作环境的稳定,则不建议使用 MacType。如果你在安装 MacType 之后,一些原先可以打开的软件忽然打不开了,一定要记得在 MacType 中排除这个软件。

顺带一提,目前 Chrome 会默认开启 DirectWrite 且不可关闭,这种情况下使用 MacType 偶尔会产生冲突。网上有许多人求禁用 Chrome 中 DriectWrite 的方法,其实没有这个必要。只需要在 MacType 中关闭针对 Chrome 的渲染,并在 Chrome 中修改浏览器显示字体就可以了。

MacType 效果展示

小结

Windows 的字体渲染问题并非是微软完全不作为,因为在 Windows 10 的 1703 和 1809 中,字体方面都得到了小幅度的改进,微软雅黑这个字体本身也经历了多次迭代,还有传闻称今年四月份微软将会用兰亭黑体替换掉微软雅黑。但在目前,Windows 渲染效果差仍然是个不争的事实。

文章对产生这个问题的原因进行了分析,显示器分辨率,系统默认字体,老的引擎难以淘汰、新的引擎未能覆盖……但只要对症下药,这些问题都是可以解决的。分别从分辨率、字体、渲染引擎几个角度下手,就能搞定 Windows 的字体渲染问题。

参考资料

文中的文字渲染机制介绍部分、Hint 方面的优化部分参考了下列文章,在这里特别感谢这些文章的原作者:

  1. 《认识字体渲染》 @康上明学
  2. 《How to Make Windows Work Better on High-DPI Displays and Fix Blurry Fonts》 @CHRIS HOFFMAN
  3. 《用 MacType 拯救你的 Windows 字体 | 一日一技》 @Weiyi_Kong
  4. 《Windows 10 字体显示优化方案》 @HydricAcid
  5. 《Windows 10 1703 字体优化方案(1.25-1.75x)》 @洛晓晓晓晓

文章来自:

banner

Power+ 2.0

¥ 269

93

沨沄极客

沨沄极客

少数派 Power+ 深度内容编辑 Be cool, but...

关注

精选评论 (9)

目录