Windows下禁用ClearType改善文字视觉效果

Windows的文字显示效果一直被用户所诟病,Windows从XP起引入了一种叫ClearType的文字显示技术,可以让文字在LCD中的显示更加锐利清晰,它是通过调整像素的RBG子像素来实现的。这种技术虽然让文字看来更锐利清晰,但是放大后边缘是彩色的,所以文字颜色失真的。使用过MacOS的读者应该知道,MacOS的文字显示与Windows不同,它看起来更真实,与打印机打印出来的一样,放大后也不是彩色边缘,配合苹果的高分辨率屏幕,看起来非常舒服,视觉效果非常好。

如果习惯了MacOS的显示效果,再看Windows的文字显示,总感觉不舒服。那Windows下有没办法做到像MacOS那样的显示效果(哪怕次一点也没关系)呢?还真有一个开源项目在做这样的事情,而且还是国人发起维护的,它就是MacType。没有对比就没有伤害,先来看看Windows原版效果与MacType的显示效果对比:

下图是Windows的记事本菜单,在开启ClearType时放大后的显示效果:

在这里插入图片描述

下图是使用MacType后的放大效果:

在这里插入图片描述

可以看到使用MacType后,菜单的文字边缘不再是彩色,而是颜色更纯正的黑色,唯有标题栏MacType目前没法生效。再看看在1920*1080分辨率下的记事本显示效果对比:
在这里插入图片描述
在这里插入图片描述

前面是Windows原来的显示效果,后面是开启MacType后的显示效果,是不是感觉后面的文字显示颜色更浓更纯真,看起来更舒服?笔者是直接使用的MacType的Default.ini进行修改的,Default.ini使用了ClearType,依旧有彩色边缘,笔者个人不喜欢彩色边缘,所以关掉了ClearType,下面给出笔者使用的配置:

[General]
Name=DefaultCopy
Icon=..\mactray.exe.ico,0

;【自动挂钩子进程】
;[0:Disable]  1:Enable
HookChildProcesses=1

;【字体微调】
;0:Normal 1:NoHinting 2:AutoHinting 3:Light+AutoHinting
HintingMode=1

;【抗锯齿方式】
;-1:Disable 0:Normal 1:Light 2:LCD(RGB) 3:LCD(GBR) 4:Light-LCD(RGB) 5:Light-LCD(GBR)
AntiAliasMode=0

;【常规体调整】
;-32:+32
NormalWeight=16

;【粗体字的调整】
;-16:+16
BoldWeight=2

;【斜体字的倾斜角度微调】
;-16:+16
ItalicSlant=0

;【只有在FontLoader=0(在下面)时此项设置才有效。建议选0,选1会占用大量内存,也没看出有什么好处。】
;0:Disable 1:Enable
UseMapping=0

;【Gamma模式开关】
;-1:关闭;0:使用设置的Gamma值(GammaValue);1:使用sRGB的Gamma值;2:不明
GammaMode=0

;【Gamma值】
;GammaMode=0的时候此项设置才有效
;sRGB ≒ 2.2 CT-Default = 1.4
;windows的cleartype的Gamma值是1.4
GammaValue=1.5

;【对比度】
;数字越大越锐利,数字越小越发虚
Contrast=1.7

;【字体轮廓】
;数字越大字体就越粗越黑
RenderWeight=1
; DirectWrite 支持;DirectWrite support
DirectWrite=1

;【文字边界设置】
;数字越大越强调背景(类似文字边界被侵蚀的感觉),强调背景会有中字体锐利的感觉。适当降低对比度,提高TextTuning,可以使文字周围的颜色看起来“淡一点”
;再加上RenderWeight,把这三个设置的微妙平衡调节好的话,能得到不输给Mac的效果
;0:12

;AntiAliasMode=1时,通过TextTuning分量来调节
TextTuning=0

;AntiAliasMode=2时,通过TextTuning的RGB分量来调节
TextTuningR=4
TextTuningG=4
TextTuningB=4

;【字体加粗模式】
;对NormalWeight和BoldWeight有效
;0:Weight值大时横向加粗,值小时双向加粗,主要是避免Weight值过大时,模式3中在小字号时加粗过度出现斩头的现象;
;1:总是横向加粗;
;2:总是双向加粗,也就是freetype本身的粗体渲染。
;注意:通过加大GammaValue、TextTuning的值,可以减少Weight值过大的造成的效果问题,即可以在BolderMode=2时也可以避免转接头
BolderMode=0

;【字体的载入方法】
;(注意是载入方法,不是渲染方法)
;0:用freetype载入字体
;1:用windows的绘图核心载入字体
;很多freetype的设置需要此项选0才能生效
FontLoader=0

;【字体链接】
;当FontLoader=0时
;0:什么都不做;
;1:使用注册表里的字体链接设置,通过FreeType的字符表进行查找
;2:使用注册表里的字体链接设置,使用Windows的转换函数直接查找
;当FontLoader=1时
;会保持启用的状态,但是所有字体链接的处理会交由WIN32API完成。
FontLink=2

;【字体替代】
;当FontLoader=0时
;0:什么都不做;
;1:安全替换方案(兼容性较好),根据以下FontSubstitutes的配置进行替换;
;2:完全替换方案(效果较全面,如替换后出现乱码,请尝试使用1),根据以下FontSubstitutes的配置进行替换;
;当FontLoader=1时
;会保持启用的状态,但是所有字体替代的处理会交由WIN32API完成
FontSubstitutes=0

;【让freetype处理的最大的字体尺寸,单位是像素,0的话就是全尺寸】
;交付 gdi++ 处理的最大尺寸(单位为像素)
;0-2147483647
MaxHeight=0

;【阴影设置】
;格式:水平偏移,垂直偏移,阴影深度(值越大,越浅)	
;Shadow=1,1,5

;【液晶显示器的优化配置】
;[0:None]  1:Default  2:Light  16:Legacy
LcdFilter=0

;【字体缓存、内存的设置】
LoadOnDemand=1
CacheMaxFaces=256
CacheMaxSizes=6140
CacheMaxBytes=20485760

;【强制使用某一个字体】
;无视所有其他字体,全系统的字体都会被这里设置的字体代替
;ForceChangeFont=华文中宋

[DirectWrite]
;渲染模式,0=默认,1=锯齿,2=经典,3=经典自然,4=自然,5=自然对称,6=字体原型
RenderingMode=6
;Gamma值,不写则根据上面的GammaValue自动计算
GammaValue=1.5
;对比度,默认为1
Contrast=1.0
;抗锯齿程度,默认1,设置为0表示关闭ClearType
ClearTypeLevel=0

[Individual]
;【单独设置的字体】
;格式=Hinting, AAMode, NormalWeight, BoldWeight, ItalicSlant, Kerning
XSong=,,30,,,
XSong SimSun=,,30,,,
XSong Mono=,,30,,,
宋体=,,30,,,
新宋体=,,30,,,
华文宋体=,,30,,,
华文中宋=,,30,,,
Batang=,,30,,,
MingLiU=,,30,,,
PMingLiU=,,30,,,
PMingLiU_HKSCS=,,30,,,
MingLiU_ExtB=,,30,,,
PMingLiU_ExtB=,,30,,,
PMingLiU_HKSCS_ExtB=,,30,,,
MS Mincho=,,30,,,
MS PMincho=,,30,,,

[Exclude]
;【除外的字体】

[ExcludeModule]
;【不渲染的程序,但仍会加载DLL】



[FontSubstitutes]
;【字体替代】
;系统在调用“=”前面的字体时会忽视“=”前面的字体,而去直接调用“=”后面的字体
SimSun=XSong SimSun
@SimSun=XSong SimSun
NSimSun=XSong Mono
@NSimSun=@XSong Mono
PMingLiu=XSong SimSun
MingLiu=XSong SimSun
;微软雅黑=XSong SimSun

[UnloadDll]
fontview.exe
AxureRP.exe
FontCreator.exe
FontCreator.cn.exe
notecaselauncher.exe
notecase.exe
gnucash-bin.exe
bleachbit.exe
Fontforge_TC.exe
Fontforge_SC.exe
Fontforge_EN.exe
dwm.exe
Fetion.exe
xdict.exe
ollyice.exe
sc2.exe
avgnt.exe
PlantsVsZombies.exe
SynTPHelper.exe
SynTPEnh.exe
war3.exe
SearchFilterHost.exe
SearchProtocolHost.exe
mspdbsrv.exe

[ExcludeSub]
javaw.exe
PPLive.exe
QQGame.exe
devenv.exe
code.exe

[Experimental]
;the aggressiveness to disarm the OS protection. 
;0=do nothing
;1=remove force MS signed binary
;2=degrade Dynamic code generation protection
ArmBreaker=1

[Experimental@Firefox.exe]
ClipBoxFix=1

Github源码Issue中有人给出一另一个深灰没字体微调的配置DeepGrayNoHinting,这个配置比笔者使用的配置文字颜色更浓更深,可以自行对比参数:

[General]
Name=DeepGrayNoHinting
Icon=..\mactray.exe.ico,0

;【自动挂钩子进程】
;[0:Disable]  1:Enable
HookChildProcesses=1

;【字体微调】
;0:Normal 1:NoHinting 2:AutoHinting 3:Light+AutoHinting
HintingMode=1

;【抗锯齿方式】
;-1:Disable 0:Normal 1:Light 2:LCD(RGB) 3:LCD(GBR) 4:Light-LCD(RGB) 5:Light-LCD(GBR)
AntiAliasMode=0

;【常规体调整】
;-32:+32
NormalWeight=16

;【粗体字的调整】
;-16:+16
BoldWeight=2

;【斜体字的倾斜角度微调】
;-16:+16
ItalicSlant=-2

;【只有在FontLoader=0(在下面)时此项设置才有效。建议选0,选1会占用大量内存,也没看出有什么好处。】
;0:Disable 1:Enable
UseMapping=0

;【Gamma模式开关】
;-1:关闭;0:使用设置的Gamma值(GammaValue);1:使用sRGB的Gamma值;2:不明
GammaMode=0

;【Gamma值】
;GammaMode=0的时候此项设置才有效
;sRGB ≒ 2.2 CT-Default = 1.4
;windows的cleartype的Gamma值是1.4
GammaValue=1.4

;【对比度】
;数字越大越锐利,数字越小越发虚
Contrast=2

;【字体轮廓】
;数字越大字体就越粗越黑
RenderWeight=2
; DirectWrite 支持;DirectWrite support
DirectWrite=1

;【文字边界设置】
;数字越大越强调背景(类似文字边界被侵蚀的感觉),强调背景会有中字体锐利的感觉。适当降低对比度,提高TextTuning,可以使文字周围的颜色看起来“淡一点”
;再加上RenderWeight,把这三个设置的微妙平衡调节好的话,能得到不输给Mac的效果
;0:12

;AntiAliasMode=1时,通过TextTuning分量来调节
TextTuning=9

;AntiAliasMode=2时,通过TextTuning的RGB分量来调节
TextTuningR=4
TextTuningG=4
TextTuningB=4

;【字体加粗模式】
;对NormalWeight和BoldWeight有效
;0:Weight值大时横向加粗,值小时双向加粗,主要是避免Weight值过大时,模式3中在小字号时加粗过度出现斩头的现象;
;1:总是横向加粗;
;2:总是双向加粗,也就是freetype本身的粗体渲染。
;注意:通过加大GammaValue、TextTuning的值,可以减少Weight值过大的造成的效果问题,即可以在BolderMode=2时也可以避免转接头
BolderMode=0

;【字体的载入方法】
;(注意是载入方法,不是渲染方法)
;0:用freetype载入字体
;1:用windows的绘图核心载入字体
;很多freetype的设置需要此项选0才能生效
FontLoader=0

;【字体链接】
;当FontLoader=0时
;0:什么都不做;
;1:使用注册表里的字体链接设置,通过FreeType的字符表进行查找
;2:使用注册表里的字体链接设置,使用Windows的转换函数直接查找
;当FontLoader=1时
;会保持启用的状态,但是所有字体链接的处理会交由WIN32API完成。
FontLink=2

;【字体替代】
;当FontLoader=0时
;0:什么都不做;
;1:安全替换方案(兼容性较好),根据以下FontSubstitutes的配置进行替换;
;2:完全替换方案(效果较全面,如替换后出现乱码,请尝试使用1),根据以下FontSubstitutes的配置进行替换;
;当FontLoader=1时
;会保持启用的状态,但是所有字体替代的处理会交由WIN32API完成
FontSubstitutes=0

;【让freetype处理的最大的字体尺寸,单位是像素,0的话就是全尺寸】
;交付 gdi++ 处理的最大尺寸(单位为像素)
;0-2147483647
MaxHeight=0

;【阴影设置】
;格式:水平偏移,垂直偏移,阴影深度(值越大,越浅)	
;Shadow=1,1,5

;【液晶显示器的优化配置】
;[0:None]  1:Default  2:Light  16:Legacy
LcdFilter=2

;【字体缓存、内存的设置】
LoadOnDemand=1
CacheMaxFaces=256
CacheMaxSizes=6140
CacheMaxBytes=20485760

;【强制使用某一个字体】
;无视所有其他字体,全系统的字体都会被这里设置的字体代替
;ForceChangeFont=华文中宋

[DirectWrite]
;渲染模式,0=默认,1=锯齿,2=经典,3=经典自然,4=自然,5=自然对称,6=字体原型
RenderingMode=6
;Gamma值,不写则根据上面的GammaValue自动计算
GammaValue=1
;对比度,默认为1
Contrast=1.4
;抗锯齿程度,默认1
ClearTypeLevel=0

[Individual]
;【单独设置的字体】
;格式=Hinting, AAMode, NormalWeight, BoldWeight, ItalicSlant, Kerning
宋体=,,30,,,
新宋体=,,30,,,
华文宋体=,,30,,,
华文中宋=,,30,,,
Batang=,,30,,,
MingLiU=,,30,,,
PMingLiU=,,30,,,
PMingLiU_HKSCS=,,30,,,
MingLiU_ExtB=,,30,,,
PMingLiU_ExtB=,,30,,,
PMingLiU_HKSCS_ExtB=,,30,,,
MS Mincho=,,30,,,
MS PMincho=,,30,,,

[Exclude]
;【除外的字体】

[ExcludeModule]
;【不渲染的程序,但仍会加载DLL】



[FontSubstitutes]
;【字体替代】
;系统在调用“=”前面的字体时会忽视“=”前面的字体,而去直接调用“=”后面的字体
;微软雅黑=XSong SimSun

[UnloadDll]
fontview.exe
cttune.exe
Fontforge_TC.exe
Fontforge_SC.exe
Fontforge_EN.exe
SynTPHelper.exe
SynTPEnh.exe
SearchFilterHost.exe
SearchProtocolHost.exe
mspdbsrv.exe

MSBuild.exe
VBCSCompiler.exe
PalmInputService.exe
ServiceHub.SettingsHost.exe
ServiceHub.IdentityHost.exe
ServiceHub.VSDetouredHost.exe
ServiceHub.Host.CLR.x86.exe
ServiceHub.Host.Node.x86.exe
ServiceHub.RoslynCodeAnalysisService32.exe
ServiceHub.ThreadedWaitDialog.exe
link.exe
cl.exe

[ExcludeSub]
javaw.exe
PPLive.exe
QQGame.exe
devenv.exe

[Experimental@Firefox.exe]
ClipBoxFix=1

MacType主要是针对Windows原来使用GDI技术显示的文字进行处理,后面Windows开发新的文字显示技术DirectWrite,目前许多应用程序都使用DirectWrite来显示文字了,比如我们常用的浏览器Chrome,Firefox等等。MacType对DirectWrite的显示处理还不完善,目前仅是实验阶段,期待早日完美支持。所以浏览器中的显示MacType貌似效果不佳。不过,笔者经过查资料测试验证,发现可以修改浏览器的参数来实现禁用ClearType,而使用灰度边缘来显示文字。

Chrome142可以在启动时添加参数--disable-lcd-text来禁用ClearType。Firefox可以在about:config中搜索cleartype,把gfx.font_rendering.cleartype_params.cleartype_level设置为0,则是禁用ClearType。由于浏览器也在不断更新,这些参数目前适用,但以前的版本或者后面的版本可能就不存在了,所以不同版本需要自行查证。

使用MacType后,VS,JB全家桶是可以正常工作的,但是所有使用Chromium内核的软件都需要使用与Chrome浏览器一致的操作,即添加--disable-lcd-text启动参数,比如VSCodeMicrosoft EdgeTyproa等等。

如果你是网页制作者,无法控制用户的浏览器参数,想要让网页在chrome浏览器中始终使用灰度边缘而不是彩色边缘显示文字,可以在CSS中使用:

-webkit-transform: translateZ(0px);
transform: translateZ(0px);

来强制Chrome浏览器禁用ClearType的显示方式,代价是牺牲一部分性能。不过这种方式,在Firefox中貌似无效。

如果本文对你有帮助,欢迎点赞收藏!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值