[字体] 用MacType修改DW的设置让字体变好看

楼主: mayuyu ((・ω・)ノ)   2016-07-21 07:09:33
打上下面的补丁可以让MacType修改系统的DirectWrite设置,
关闭DirectWrite使用的Grid-fitting,让高DPI下字体显示变好看。
效果Win10
Edge打补丁前
Edge打补丁后
背景说明
1. 因为中文字笔画很多很复杂,当小字体的时候能使用的像素点很少,
像素不够多描绘出所有的笔画,字体会黏成黑黑的一团无法分辨,
所以这时候必须要省略一些笔画细节,将字体扭曲变形,
以有限的像素点来呈现原本字体大略的形象,才能让人看得懂显示的是什么字。
这个包含在字型里,告诉渲染引擎要省略哪些笔画(像素点)的资讯,
称为Hinting,在ClearType、DirectWrite底下就是由Grid-fitting这个功能来完成的。
2. 然而现在萤幕的分辨率越来越高,人们通常使用高DPI来显示字体,
在大号的字体下,已经有足够多的像素点来显示所有的中文笔画,
所以省略笔画的Hinting已经没有必要,而且有一些字体附带的Hinting讯息效果不好,
加上Hinting后字体反而残缺不全,高低不齐,变得非常难看。
3. 所以之前人们提出了二种方法来解决这个Hinting的问题。
第一个方法是去掉字型本身附带的Hinting资讯,改造成没有Hinting的字型,
用来替换掉原本的系统字型。
这个方法的缺点是使用传统GDI渲染的应用使用这个字型时,显示效果会非常惨烈。
第二个方法是修改字型里面的GASP表格,
让使用DirectWrite渲染的应用不会读取字型内建的Hinting讯息,
但是GDI应用则不受影响,就不会有第一个方法的缺失。
不过这个方法只对本地替换过GASP表格的字型有效,
如果网页使用的是Web Font就一样没辄,
还有在Win7下也没有作用。
4. 微软在Win10 10586以后自己修改了字型的GASP表格,降低了一点点门槛,
让大字号(21px以上)的字体不使用Grid-fitting,
然而...21px的门槛还是太高了,系统DPI要设置为200%才有作用,
而拥有超高分辨率萤幕的使用者目前还不普及,所以这个修改仍然不太实用。
因此只有直接修改系统的DirectWrite设置,
在全域关闭DirectWrite的Grid-fitting,
这样不管用什么字型都不会受到Hinting的摧残,
才能够完美解决Windows字体显示的问题。
现在日本2ch上有一位网友利用开放原始码的MacType,
为MacType加上了可以修改系统DirectWrite设定的功能,
让我们可以利用MacType关闭DirectWrite的Grid-fitting,
在Win10 HiDPI下可以呈现最忠实自然无破坏的字体显示效果。
下载
http://silight.hatenablog.jp/entry/MacTypePatch
按照说明替换MacType的档案
How to use
1. Open MacType directory.
2. Rename or delete EasyHK32.dll and EasyHK64.dll(64bit only)
3. Copy our DLLs and UserParams.ini to MacType directory.
4. Also Copy our DLLs to System directory as below.
32bit
C:\Windows\System32\EasyHK32.dll
64bit
C:\Windows\System32\EasyHK64.dll
C:\Windows\SysWOW64\EasyHK32.dll
Good Luck!
打完补丁后GDI的部分仍然是使用原本MacType(FreeType)的渲染设定,
而使用DirectWrite渲染的程式则会按照UserParams.ini里设置的参数来渲染。
注意事项
1. 这个补丁在Win8.1/Win10下的效果和Win7/Win8是不同的
因为Win8.1/Win10的DirectWrite有关掉Grid-fitting的选项,
而Win7/Win8并不支援这个功能,所以最重要的GridFitMode = 1参数没有作用。
2. 在Win7/Win8下如果要避免Grid-fitting,
渲染模式只能选Outline(RenderingMode = 6),
但是在Outline模式下,调整Gamma值这些参数,还有双向的次像素渲染都会失效,
在DirectWrite+D2D硬件加速下也只能用x轴的灰阶抗锯齿,y轴无渲染效果,
所以抗锯齿的效果会不太好。
效果Win7
IE11打补丁前
IE11打补丁后
修改UserParams.ini
将Win7的渲染模式设定改为 6 = Outline
可以看到原本高低不齐的微软雅黑变得相当整齐,
(例如第一行的“火烧车酿成”的“成”这个字特别扁)
锯齿稍微减少一点,字体稍微变黑一点,
不过最重要的还是高低不齐的字体会变得比较整齐。
3. 对Chrome部分参数设定没有作用
Chrome部分渲染处理是自行处理的,所以无法通过DW设置修改
4. 对Chrome的Flash文字没有抗锯齿的效果
这是已知的Chrome的Bug,要等Chrome修正他的Flash外挂之后才会正常
5. 使用MacTray拖盘加载的渲染方式,结果无法渲染商店应用
本来就是如此,这是正常的,请改用服务加载或者注册表加载
(图等有空再补...)
作者: zhtw (人生就是不停的后悔。。)   2016-07-21 08:28:00
前几天有看的 还没时间测试 不知道效果好不好…chromium要用mactype渲染蛮麻烦的 还有Bug偶尔会缺字
作者: rick (可惜没如果)   2016-07-21 08:47:00
等图中..
楼主: mayuyu ((・ω・)ノ)   2016-07-21 08:50:00
不不,这个补丁不是用MacType(FreeType)来渲染Chrome他是透过MacType使用的EZHook,去Hook DirectWrite的API然后凡是使用DirectWrite渲染的应用 就会通过EZHook覆写的参数来进行渲染 所以我们就可以改变原本DirectWrite输出的效果就好像...送货的途中被别人拦截绑票一样xD所以Chrome不用改任何设定 还是一样用原本的DirectWrite输出 处理的引擎还是DirectWrite 只是覆写修改了DirectWrite本身提供的参数 主要是去掉Grid-fitting所以这个补丁不是将DW的程式改用MacType渲染而是利用MacType使用的EZHook来覆写DW的设定真正在处理渲染的仍然是DirectWrite 所以有二条路线DW渲染的应用 -> 覆写DW参数 -> 交由DW渲染GDI渲染的应用 -> MacType(FreeType)渲染还有Chrome从52版以后 就会拔掉传统GDI输出以后将只能使用DirectWrite渲染 不能关闭DirectWrite所以现在关闭Chrome的DW 让MacType可以渲染Chrome的方法将会在52版以后失效而这个补丁由于上述的原理 不会有失不失效的问题图不太有时间弄 作者的网页有附看不太出来效果的简图可以加减看:p
作者: zhtw (人生就是不停的后悔。。)   2016-07-21 09:16:00
我说的就是关掉DW后的渲染啦 关掉DW再渲染有时候会漏字
作者: hohiyan (海洋)   2016-07-21 09:51:00
麻友友的图呢?(我要看绑马尾的
作者: shasen1235 (Ssin)   2016-07-21 09:58:00
比较想等Stylish出来比较方便 如果有的话XDD
作者: abccbaandy (敏)   2016-07-21 10:16:00
同楼上,web还是用stylish比较稳不过其他程式就无解了...有些游戏的中文真的看到快瞎掉
楼主: mayuyu ((・ω・)ノ)   2016-07-21 12:18:00
图来了 " target="_blank" rel="nofollow">
360度无死角
作者: t7yang (t7: 我认为这是一种背叛)   2016-07-21 12:46:00
我可以嘘吗?害我还很认真地点开图来看(笑
楼主: mayuyu ((・ω・)ノ)   2016-07-21 13:17:00
就h大要求的mayuyu马尾图啊(无辜正经的图 来不及撷Win10的 用Win7的IE11当范例吧打补丁前 " target="_blank" rel="nofollow">
打补丁后+RenderingMode设为6=Outline" target="_blank" rel="nofollow">
图里面的字型是微软雅黑 因为Win7的IE11在设定里选“忽略网页指定的字型” 雅虎奇摩新闻会变成用IE简体中文字型那边的设定 用雅黑当范例有一个好处是雅黑的Hinting是公认的非常惨烈开了Hinting后字体的高低变化会非常剧烈造成字体排起来特别不整齐 例如第一行的“火烧车酿成”的“成”这个字特别扁 和旁边的字形成很大的落差变得非常难看 所以去掉Hinting后的改善特别明显不过要注意的是中国繁体字的写法和台湾的标准写法不同例如“超过负载”的“过”这个字对比表 " target="_blank" rel="nofollow">
如果你用明兰字型的话 明兰是旧字体(康熙字体)辶上面会有二点 手机上的Droid Sans Fallback和文泉驿都是使用中国的繁体标准 所以如果是要给学习教育部标准写法的学生使用的话 就不适合采用这些字型
作者: abc0922001 (中士abc)   2016-07-21 13:47:00
冲著麻友,来试试看。我的是15.6吋1080p的萤幕,会变比较好吗?
作者: hohiyan (海洋)   2016-07-21 14:31:00
这图好(赞 XDDDD
作者: Kreen (每天要更優秀一點)   2016-07-21 15:43:00
Mayuyu 用的是哪个版本的 Mactray 和 Mactype 呀?还是这点没关系?
作者: kaoh08 (AIR -the 1000th summer-)   2016-07-21 17:14:00
Safari支援 " target="_blank" rel="nofollow">
作者: Weikey (Weikey)   2016-07-24 09:11:00
请问Chrome52以后要怎么办, 我真的快被中文字体的渲染气疯了,他们开发的时候就不能把字体的美观放在心上吗? 还是处理字体其实很简单, 是我不知道方法?? 怎么好像很多人都没这问题, 一直以为觉得字体的问题应该是月经文,很泛滥的..今天起来看到chorme又怎么模糊,一整个火气很大 ><已经先用回chorme50了~~ 要不然眼睛真的受不了
作者: tom27751989 (Himeko)   2016-07-24 13:10:00
是说我用了之后好像还是一样...chrome系的浏览器还是要停用dw 渲染才会成功但是flag里面设定会变乱码
作者: junorn (威廉华勒斯)   2016-07-25 14:34:00
图比字重要(O
作者: Chemise   2016-07-25 21:49:00
用了没变+1 想请问如何解? 52版看了眼睛很瞎orz..
作者: zhtw (人生就是不停的后悔。。)   2016-07-27 11:48:00
偷偷说 Cent新版会把DW选项做回去 目前在测试中了(还有BUG)
作者: sate5232 (Hao)   2016-08-02 21:45:00
我照做了 UWP程式例如Edge等都还是没渲染....也是用注册表加载
作者: maxximus (maxx)   2016-08-12 09:58:00
感谢mayuyu的详细解释,之前在另一个对岸网友的网页看到那个日本网友的补丁,但是不太了解原理,现在知道了。https://zhuanlan.zhihu.com/p/21676135

Links booklink

Contact Us: admin [ a t ] ucptt.com