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

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

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

1 开启ClearType时放大后的显示效果

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

使用MacType后的放大效果

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

Windows原来的显示效果

开启MacType后的显示效果

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

  1[General]
  2Name=DefaultCopy
  3Icon=..\mactray.exe.ico,0
  4
  5;【自动挂钩子进程】
  6;[0:Disable]  1:Enable
  7HookChildProcesses=1
  8
  9;【字体微调】
 10;0:Normal 1:NoHinting 2:AutoHinting 3:Light+AutoHinting
 11HintingMode=1
 12
 13;【抗锯齿方式】
 14;-1:Disable 0:Normal 1:Light 2:LCD(RGB) 3:LCD(GBR) 4:Light-LCD(RGB) 5:Light-LCD(GBR)
 15AntiAliasMode=0
 16
 17;【常规体调整】
 18;-32:+32
 19NormalWeight=16
 20
 21;【粗体字的调整】
 22;-16:+16
 23BoldWeight=2
 24
 25;【斜体字的倾斜角度微调】
 26;-16:+16
 27ItalicSlant=0
 28
 29;【只有在FontLoader=0(在下面)时此项设置才有效。建议选0,选1会占用大量内存,也没看出有什么好处。】
 30;0:Disable 1:Enable
 31UseMapping=0
 32
 33;【Gamma模式开关】
 34;-1:关闭;0:使用设置的Gamma值(GammaValue);1:使用sRGB的Gamma值;2:不明
 35GammaMode=0
 36
 37;【Gamma值】
 38;GammaMode=0的时候此项设置才有效
 39;sRGB ≒ 2.2 CT-Default = 1.4
 40;windows的cleartype的Gamma值是1.4
 41GammaValue=1.5
 42
 43;【对比度】
 44;数字越大越锐利,数字越小越发虚
 45Contrast=1.7
 46
 47;【字体轮廓】
 48;数字越大字体就越粗越黑
 49RenderWeight=1
 50; DirectWrite 支持;DirectWrite support
 51DirectWrite=1
 52
 53;【文字边界设置】
 54;数字越大越强调背景(类似文字边界被侵蚀的感觉),强调背景会有中字体锐利的感觉。适当降低对比度,提高TextTuning,可以使文字周围的颜色看起来“淡一点”
 55;再加上RenderWeight,把这三个设置的微妙平衡调节好的话,能得到不输给Mac的效果
 56;0:12
 57
 58;AntiAliasMode=1时,通过TextTuning分量来调节
 59TextTuning=0
 60
 61;AntiAliasMode=2时,通过TextTuning的RGB分量来调节
 62TextTuningR=4
 63TextTuningG=4
 64TextTuningB=4
 65
 66;【字体加粗模式】
 67;对NormalWeight和BoldWeight有效
 68;0:Weight值大时横向加粗,值小时双向加粗,主要是避免Weight值过大时,模式3中在小字号时加粗过度出现斩头的现象;
 69;1:总是横向加粗;
 70;2:总是双向加粗,也就是freetype本身的粗体渲染。
 71;注意:通过加大GammaValue、TextTuning的值,可以减少Weight值过大的造成的效果问题,即可以在BolderMode=2时也可以避免转接头
 72BolderMode=0
 73
 74;【字体的载入方法】
 75;(注意是载入方法,不是渲染方法)
 76;0:用freetype载入字体
 77;1:用windows的绘图核心载入字体
 78;很多freetype的设置需要此项选0才能生效
 79FontLoader=0
 80
 81;【字体链接】
 82;当FontLoader=0时
 83;0:什么都不做;
 84;1:使用注册表里的字体链接设置,通过FreeType的字符表进行查找
 85;2:使用注册表里的字体链接设置,使用Windows的转换函数直接查找
 86;当FontLoader=1时
 87;会保持启用的状态,但是所有字体链接的处理会交由WIN32API完成。
 88FontLink=2
 89
 90;【字体替代】
 91;当FontLoader=0时
 92;0:什么都不做;
 93;1:安全替换方案(兼容性较好),根据以下FontSubstitutes的配置进行替换;
 94;2:完全替换方案(效果较全面,如替换后出现乱码,请尝试使用1),根据以下FontSubstitutes的配置进行替换;
 95;当FontLoader=1时
 96;会保持启用的状态,但是所有字体替代的处理会交由WIN32API完成
 97FontSubstitutes=0
 98
 99;【让freetype处理的最大的字体尺寸,单位是像素,0的话就是全尺寸】
100;交付 gdi++ 处理的最大尺寸(单位为像素)
101;0-2147483647
102MaxHeight=0
103
104;【阴影设置】
105;格式:水平偏移,垂直偏移,阴影深度(值越大,越浅)	
106;Shadow=1,1,5
107
108;【液晶显示器的优化配置】
109;[0:None]  1:Default  2:Light  16:Legacy
110LcdFilter=0
111
112;【字体缓存、内存的设置】
113LoadOnDemand=1
114CacheMaxFaces=256
115CacheMaxSizes=6140
116CacheMaxBytes=20485760
117
118;【强制使用某一个字体】
119;无视所有其他字体,全系统的字体都会被这里设置的字体代替
120;ForceChangeFont=华文中宋
121
122[DirectWrite]
123;渲染模式,0=默认,1=锯齿,2=经典,3=经典自然,4=自然,5=自然对称,6=字体原型
124RenderingMode=6
125;Gamma值,不写则根据上面的GammaValue自动计算
126GammaValue=1.5
127;对比度,默认为1
128Contrast=1.0
129;抗锯齿程度,默认1,设置为0表示关闭ClearType
130ClearTypeLevel=0
131
132[Individual]
133;【单独设置的字体】
134;格式=Hinting, AAMode, NormalWeight, BoldWeight, ItalicSlant, Kerning
135XSong=,,30,,,
136XSong SimSun=,,30,,,
137XSong Mono=,,30,,,
138宋体=,,30,,,
139新宋体=,,30,,,
140华文宋体=,,30,,,
141华文中宋=,,30,,,
142Batang=,,30,,,
143MingLiU=,,30,,,
144PMingLiU=,,30,,,
145PMingLiU_HKSCS=,,30,,,
146MingLiU_ExtB=,,30,,,
147PMingLiU_ExtB=,,30,,,
148PMingLiU_HKSCS_ExtB=,,30,,,
149MS Mincho=,,30,,,
150MS PMincho=,,30,,,
151
152[Exclude]
153;【除外的字体】
154
155[ExcludeModule]
156;【不渲染的程序,但仍会加载DLL】
157
158
159
160[FontSubstitutes]
161;【字体替代】
162;系统在调用“=”前面的字体时会忽视“=”前面的字体,而去直接调用“=”后面的字体
163SimSun=XSong SimSun
164@SimSun=XSong SimSun
165NSimSun=XSong Mono
166@NSimSun=@XSong Mono
167PMingLiu=XSong SimSun
168MingLiu=XSong SimSun
169;微软雅黑=XSong SimSun
170
171[UnloadDll]
172fontview.exe
173AxureRP.exe
174FontCreator.exe
175FontCreator.cn.exe
176notecaselauncher.exe
177notecase.exe
178gnucash-bin.exe
179bleachbit.exe
180Fontforge_TC.exe
181Fontforge_SC.exe
182Fontforge_EN.exe
183dwm.exe
184Fetion.exe
185xdict.exe
186ollyice.exe
187sc2.exe
188avgnt.exe
189PlantsVsZombies.exe
190SynTPHelper.exe
191SynTPEnh.exe
192war3.exe
193SearchFilterHost.exe
194SearchProtocolHost.exe
195mspdbsrv.exe
196
197[ExcludeSub]
198javaw.exe
199PPLive.exe
200QQGame.exe
201devenv.exe
202code.exe
203
204[Experimental]
205;the aggressiveness to disarm the OS protection. 
206;0=do nothing
207;1=remove force MS signed binary
208;2=degrade Dynamic code generation protection
209ArmBreaker=1
210
211[Experimental@Firefox.exe]
212ClipBoxFix=1

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

  1[General]
  2Name=DeepGrayNoHinting
  3Icon=..\mactray.exe.ico,0
  4
  5;【自动挂钩子进程】
  6;[0:Disable]  1:Enable
  7HookChildProcesses=1
  8
  9;【字体微调】
 10;0:Normal 1:NoHinting 2:AutoHinting 3:Light+AutoHinting
 11HintingMode=1
 12
 13;【抗锯齿方式】
 14;-1:Disable 0:Normal 1:Light 2:LCD(RGB) 3:LCD(GBR) 4:Light-LCD(RGB) 5:Light-LCD(GBR)
 15AntiAliasMode=0
 16
 17;【常规体调整】
 18;-32:+32
 19NormalWeight=16
 20
 21;【粗体字的调整】
 22;-16:+16
 23BoldWeight=2
 24
 25;【斜体字的倾斜角度微调】
 26;-16:+16
 27ItalicSlant=-2
 28
 29;【只有在FontLoader=0(在下面)时此项设置才有效。建议选0,选1会占用大量内存,也没看出有什么好处。】
 30;0:Disable 1:Enable
 31UseMapping=0
 32
 33;【Gamma模式开关】
 34;-1:关闭;0:使用设置的Gamma值(GammaValue);1:使用sRGB的Gamma值;2:不明
 35GammaMode=0
 36
 37;【Gamma值】
 38;GammaMode=0的时候此项设置才有效
 39;sRGB ≒ 2.2 CT-Default = 1.4
 40;windows的cleartype的Gamma值是1.4
 41GammaValue=1.4
 42
 43;【对比度】
 44;数字越大越锐利,数字越小越发虚
 45Contrast=2
 46
 47;【字体轮廓】
 48;数字越大字体就越粗越黑
 49RenderWeight=2
 50; DirectWrite 支持;DirectWrite support
 51DirectWrite=1
 52
 53;【文字边界设置】
 54;数字越大越强调背景(类似文字边界被侵蚀的感觉),强调背景会有中字体锐利的感觉。适当降低对比度,提高TextTuning,可以使文字周围的颜色看起来“淡一点”
 55;再加上RenderWeight,把这三个设置的微妙平衡调节好的话,能得到不输给Mac的效果
 56;0:12
 57
 58;AntiAliasMode=1时,通过TextTuning分量来调节
 59TextTuning=9
 60
 61;AntiAliasMode=2时,通过TextTuning的RGB分量来调节
 62TextTuningR=4
 63TextTuningG=4
 64TextTuningB=4
 65
 66;【字体加粗模式】
 67;对NormalWeight和BoldWeight有效
 68;0:Weight值大时横向加粗,值小时双向加粗,主要是避免Weight值过大时,模式3中在小字号时加粗过度出现斩头的现象;
 69;1:总是横向加粗;
 70;2:总是双向加粗,也就是freetype本身的粗体渲染。
 71;注意:通过加大GammaValue、TextTuning的值,可以减少Weight值过大的造成的效果问题,即可以在BolderMode=2时也可以避免转接头
 72BolderMode=0
 73
 74;【字体的载入方法】
 75;(注意是载入方法,不是渲染方法)
 76;0:用freetype载入字体
 77;1:用windows的绘图核心载入字体
 78;很多freetype的设置需要此项选0才能生效
 79FontLoader=0
 80
 81;【字体链接】
 82;当FontLoader=0时
 83;0:什么都不做;
 84;1:使用注册表里的字体链接设置,通过FreeType的字符表进行查找
 85;2:使用注册表里的字体链接设置,使用Windows的转换函数直接查找
 86;当FontLoader=1时
 87;会保持启用的状态,但是所有字体链接的处理会交由WIN32API完成。
 88FontLink=2
 89
 90;【字体替代】
 91;当FontLoader=0时
 92;0:什么都不做;
 93;1:安全替换方案(兼容性较好),根据以下FontSubstitutes的配置进行替换;
 94;2:完全替换方案(效果较全面,如替换后出现乱码,请尝试使用1),根据以下FontSubstitutes的配置进行替换;
 95;当FontLoader=1时
 96;会保持启用的状态,但是所有字体替代的处理会交由WIN32API完成
 97FontSubstitutes=0
 98
 99;【让freetype处理的最大的字体尺寸,单位是像素,0的话就是全尺寸】
100;交付 gdi++ 处理的最大尺寸(单位为像素)
101;0-2147483647
102MaxHeight=0
103
104;【阴影设置】
105;格式:水平偏移,垂直偏移,阴影深度(值越大,越浅)	
106;Shadow=1,1,5
107
108;【液晶显示器的优化配置】
109;[0:None]  1:Default  2:Light  16:Legacy
110LcdFilter=2
111
112;【字体缓存、内存的设置】
113LoadOnDemand=1
114CacheMaxFaces=256
115CacheMaxSizes=6140
116CacheMaxBytes=20485760
117
118;【强制使用某一个字体】
119;无视所有其他字体,全系统的字体都会被这里设置的字体代替
120;ForceChangeFont=华文中宋
121
122[DirectWrite]
123;渲染模式,0=默认,1=锯齿,2=经典,3=经典自然,4=自然,5=自然对称,6=字体原型
124RenderingMode=6
125;Gamma值,不写则根据上面的GammaValue自动计算
126GammaValue=1
127;对比度,默认为1
128Contrast=1.4
129;抗锯齿程度,默认1
130ClearTypeLevel=0
131
132[Individual]
133;【单独设置的字体】
134;格式=Hinting, AAMode, NormalWeight, BoldWeight, ItalicSlant, Kerning
135宋体=,,30,,,
136新宋体=,,30,,,
137华文宋体=,,30,,,
138华文中宋=,,30,,,
139Batang=,,30,,,
140MingLiU=,,30,,,
141PMingLiU=,,30,,,
142PMingLiU_HKSCS=,,30,,,
143MingLiU_ExtB=,,30,,,
144PMingLiU_ExtB=,,30,,,
145PMingLiU_HKSCS_ExtB=,,30,,,
146MS Mincho=,,30,,,
147MS PMincho=,,30,,,
148
149[Exclude]
150;【除外的字体】
151
152[ExcludeModule]
153;【不渲染的程序,但仍会加载DLL】
154
155
156
157[FontSubstitutes]
158;【字体替代】
159;系统在调用“=”前面的字体时会忽视“=”前面的字体,而去直接调用“=”后面的字体
160;微软雅黑=XSong SimSun
161
162[UnloadDll]
163fontview.exe
164cttune.exe
165Fontforge_TC.exe
166Fontforge_SC.exe
167Fontforge_EN.exe
168SynTPHelper.exe
169SynTPEnh.exe
170SearchFilterHost.exe
171SearchProtocolHost.exe
172mspdbsrv.exe
173
174MSBuild.exe
175VBCSCompiler.exe
176PalmInputService.exe
177ServiceHub.SettingsHost.exe
178ServiceHub.IdentityHost.exe
179ServiceHub.VSDetouredHost.exe
180ServiceHub.Host.CLR.x86.exe
181ServiceHub.Host.Node.x86.exe
182ServiceHub.RoslynCodeAnalysisService32.exe
183ServiceHub.ThreadedWaitDialog.exe
184link.exe
185cl.exe
186
187[ExcludeSub]
188javaw.exe
189PPLive.exe
190QQGame.exe
191devenv.exe
192
193[Experimental@Firefox.exe]
194ClipBoxFix=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中使用:

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

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

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