通过修改字体来删除 Windows 文字渲染的点阵字并禁用 gridfit。
[ English ] [ 正體中文 ] [ 简体中文 ] [ 日本語 ]
自从 Windows 10 的 1703 版本(创造者更新)开始,自带的 TrueType 渲染器能支持纵向抗锯齿了。虽然新的抗锯齿模式实际上只是 16× SSAA,(比 FreeType 搭载的积分抗锯齿仍逊色不少,)但也是很大的进步,并明显优化了中文显示的效果。可惜的是,只有寥寥数个字体在特定尺寸下能默认使用这个功能。
通过本工具,你可以给几乎任何字体启用纵向抗锯齿,同时还能移除内嵌的点阵字,让高分屏下文字更加耐看。
以下的图片必须以 100% 缩放比例观看。
Before FaithType: 全新安装的 Windows 10,21H1 版本。
After FaithType: FaithType 修改后的字体文件,同时关闭 LCD 滤波器。
FreeType(参考): Fedora Linux 34,同时关闭 hinting 和 LCD 滤波器。
-
下载最新版本。
-
解压下载的 ZIP 压缩包。
-
右键点击
Auto-Patch-Then-Install.ps1
,选择“使用 PowerShell 运行”。 -
等待脚本自动处理字体文件并安装到
C:\Windows\Fonts\FaithType
。 -
完成后,窗口最下方会提示“Press Enter to exit”。请检查有没有任何报错。
-
重启系统。
如果需要卸载,请右键点击 Auto-Uninstall.ps1
,选择“使用 PowerShell 运行”,再重启系统。如果需要重新安装,请务必先卸载再重新安装。
-
下载最新版本。
-
解压下载的 ZIP 压缩包。
-
打开终端(命令提示符或 PowerShell 皆可):
cd FaithTyper的路径\
-
阅读使用说明(英文):
.\faithtype.exe --help
-
处理字体文件:
mkdir "C:\Windows\Fonts\FaithType" .\faithtype.exe "C:\Windows\Fonts\msyh.ttc" -o "C:\Windows\Fonts\FaithType\msyh.ttc" .\faithtype.exe "C:\Windows\Fonts\msyhbd.ttc" -o "C:\Windows\Fonts\FaithType\msyhbd.ttc" .\faithtype.exe "C:\Windows\Fonts\msyhl.ttc" -o "C:\Windows\Fonts\FaithType\msyhl.ttc" .\faithtype.exe "C:\Windows\Fonts\simfang.ttf" -o "C:\Windows\Fonts\FaithType\simfang.ttf" .\faithtype.exe "C:\Windows\Fonts\simhei.ttf" -o "C:\Windows\Fonts\FaithType\simhei.ttf" .\faithtype.exe "C:\Windows\Fonts\simkai.ttf" -o "C:\Windows\Fonts\FaithType\simkai.ttf" .\faithtype.exe "C:\Windows\Fonts\simsun.ttc" -o "C:\Windows\Fonts\FaithType\simsun.ttc" .\faithtype.exe "C:\Windows\Fonts\simsunb.ttf" -o "C:\Windows\Fonts\FaithType\simsunb.ttf"
-
可选: 如果你打算重建 hinting 指令,在这一步使用 ttfautohint 进行 hinting 重建。
-
确认 Windows 可以正常打开和预览修改后的字体文件。
-
修改注册表:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts] "FangSong (TrueType)"="C:\Windows\Fonts\FaithType\simfang.ttf" "KaiTi (TrueType)"="C:\Windows\Fonts\FaithType\simkai.ttf" "Microsoft YaHei & Microsoft YaHei UI (TrueType)"="C:\Windows\Fonts\FaithType\msyh.ttc" "Microsoft YaHei Bold & Microsoft YaHei UI Bold (TrueType)"="C:\Windows\Fonts\FaithType\msyhbd.ttc" "Microsoft YaHei Light & Microsoft YaHei UI Light (TrueType)"="C:\Windows\Fonts\FaithType\msyhl.ttc" "SimHei (TrueType)"="C:\Windows\Fonts\FaithType\simhei.ttf" "SimSun & NSimSun (TrueType)"="C:\Windows\Fonts\FaithType\simsun.ttc" "SimSun-ExtB (TrueType)"="C:\Windows\Fonts\FaithType\simsunb.ttf"
-
重启系统。
-
为何要删除点阵字?
虽然 OpenType 支持灰阶点阵字,Windows 自带的点阵字只有黑白二值。就算是像素数量够多的高分屏,本应能载入清晰平滑的矢量字,却被点阵拖累而无能为力。
此外,ClearType 关闭后有些本来不会加载的点阵字会被加载起来。本来不需要理会它们,但现在 ClearType 出了 bug(见下文),所以得删除这些点阵字了。
-
为何要禁用 gridfit?
Windows 自带的字体喜欢大量使用 TrueType hinting 来将曲线对齐到像素格点,导致高分屏上文字也显得疙疙瘩瘩。有些人可能还用着 VGA 模拟连接线和未校色的屏幕,却在反驳这种渲染风格有高对比度和锐度。但对我来说,稍微阅读一小会儿严重 gridfit 的文字就会头晕脑胀。
-
为何要修改
gasp
表?因为在 Windows 10 的 1703 至 1903 之间的某个版本,ClearType 坏掉了。确切来说,通过 “ClearType 文本调谐器” 也关不掉 LCD 滤波器了。[ 相关调查 ]
LCD 滤波器本来是给液晶显示器在 1:1 缩放比例下使用的。换句话说,在投影仪、电视机、PenTile 屏、可旋转设备、视频录像、屏幕截图、远程会议、PPT 幻灯片、DPI 缩放后的应用程序等等环境下不应该使用 LCD 滤波器。然而微软 “画图” 的文本框工具画出来的文字竟然有 LCD 滤波的彩边。
如果你完全关掉 ClearType,一部分自带字体会变得不清晰,还会出现 bug。解决方案之一就是使用 FaithType 来处理字体文件,通过修改
gasp
表,你可以保持 ClearType 关着的状态下向系统请求纵横双向抗锯齿。
在旧版 (Mac) OS X 中,TrueType 渲染器会加粗笔划来在低分屏上维持稳定的对比度。但 Windows 并不会做笔划加粗。我的个人经验是易认的文字渲染需要至少 1.3px 笔划宽度,但 Windows 自带的字体都太细了。
-
把 gamma 从
0x00000898
改成0x00000708
可能有用:Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Avalon.Graphics\DISPLAY1] "GammaLevel"=dword:00000708
-
另外一个办法是使用 ttfautohint 来生成加粗笔划的 hinting 指令。
-
终极解决方案是去买一台高分屏。
根据应用程序开发所使用的 GUI 框架,FaithType 有如下的技术限制。
- Java:不支持从自定义路径加载字体。
- Qt:文字边缘的像素可能会被裁切。可能会选择错误的 gamma,导致文字太淡。
- WPF(例如 Visual Studio):不支持双向抗锯齿。
-
Microsoft Yahei(微软雅黑)、Microsoft Jhenghei(微軟正黑體)、Meiryo(メイリオ):
它们的 hinting 指令不支持纵向抗锯齿。你需要移除 hinting。
-
Monotype Courier New:
蒙纳的 Courier New 是按照 IBM 打字机的金属活字来设计的,而并不是按照油墨在纸上渗开之后的形状来设计的。总体来说这个字体很垃圾,请改用 “Bitstream Courier 10 Pitch”。
-
4.55 版本之前的 DynaLab MingLiU(華康細明體)、DynaLab BiauKai(華康標楷體):
此字体使用 TrueType hinting 来动态组字。请不要移除 hinting。
本软件依 GPL 许可证第 3 版或更新版发布。
本软件可能会因我的 bug、微软的 bug 或者第三方应用的 bug 导致操作系统不稳定现象的发生。本软件是本着希望能造福大众的目的而无偿发布的,因此不包含任何形式的担保,也即是说用户需要对使用本软件造成的后果负担责任。