Windows的ClearType渲染字体方式,结合臭名昭著的hinting技术使微软雅黑字体备受争议,正所谓:成也hinting,败也hinting。
首先什么是hinting?
Hinting 这个词一直都没有中文名称,我用粤语将它音译为“牵挺”。
个人解释: "牵" 可以理解为引导和调整,而 "挺" 则可以解释为挺拔、优雅。
按照官方的解释,Hinting的目的是为了确保在低分辨率屏幕上,小字号字体也能够清晰可读。然而,在追求清晰的同时,hinting可能会导致笔画的位置偏移和错位,从而损害了字体的整体设计美感。
在我看来,hinting是一种动态模拟点阵字体效果的技术。
因此,微软雅黑字体在小字号下会出现各种奇怪的笔画位置不正确的现象,主要是因为hinting为了在狭小的点阵像素空间内实现清晰展示,牺牲了原本中文字体的设计意图。
相比之下,Mac OS采用的平滑渲染字体效果一直受到许多用户的喜爱,Windows用户只有眼馋的份。为了追求模拟Mac OS的平滑渲染字体效果,摆脱Windows hinting的影响,字体爱好者追捧先后出现的GDI++和MacType等外挂式字体渲染工具,使得Win系统的字体显示更加“所见即所印”。(GDI++是MacType的先驱。我是从2008年开始在WinXP系统使用GDI++,2012年后Win7系统使用MacType。)
Windows 10之后引入了DirectWrite渲染方式,但在系统缩放比例200%以下,DirectWrite仍无法完全解决微软雅黑字体显示不平滑的问题。那就继续用MacType呗……更糟糕的是,越来越多的生产力应用(如Chrome浏览器、WPS、Photoshop等)已经我行我素,强行使用Hinting渲染,完全无视MacType,导致MacType可渲染的对象越来越少,MacType的地位变得越来越不重要。
因此,干脆直接干掉字体的hinting吧!尽管这样会导致在小字号下显示比较模糊。在只要把系统的字体缩放比例设为125%以上,微软雅黑的观感将显著提升。
早在2008年坊间就有流传过“无hinting的微软雅黑”字体,字体名称为 iYahei,文件大约8M。可惜在WinXP、Win7系统默认的渲染模式下显示发虚,笔画的粗细不一,远远达不到MacType的效果。
然而我把 iYahei 存入手机代替默认字体却能完美展现。从2008年我使用的诺基亚手机,到后来的安卓系统的手机,我都替换手机的默认字体为 iYahei。除了 iYahei,也有其他人制作的无hinting字体,受多人推崇。
为什么不直接把有hinting的微软雅黑替换安卓手机的默认字体?我早已尝试过,带有hinting的微软雅黑在安卓系统里也会按照hinting信息渲染字体,跟Windows的默认渲染效果一样不好看。唯有去除hinting,才能真正再现字体设计的本色。
多年以来,我都在寻找一款能够删除hinting的工具,现在终于找到了,并将其记录如下:
需要用到的利器: TtfAutoHint (度盘链接:https://pan.baidu.com/s/1Mv-hpb7mqxzLf22Z1lDGbA?pwd=ttj5 提取码: ttj5)
另外,需要 WinPE环境(U盘或者本地硬盘安装)。
在Windows的命令提示符使用以下命令来删除hinting:
d:\downloads\ttfautohint -d c:\windows\fonts\msyh.ttc c:\msyh.ttc
微软雅黑常规体文件msyh.ttc原先体积是22.5M,经过这样去除hinting之后,生成的新字体文件大大缩小到8M,这跟多年前的 iYahei 字体差不多大了,可见微软每次升级Windows系统和微软雅黑字体,为了讨好眼球,都是制造更多的 hinting。在我看来,这些 hinting 都是垃圾,真正有效的矢量字体信息就是8M够了。
如果要批量转换Windows系统的字体,可以在命令行下可以使用下面命令:
cd /d %windir%\fonts
for %a in (*.tt?) do d:\downloads\ttfautohint -d %a c:\%a
这样就一次性把系统所有.ttc和.ttf的字体都去掉hinting,输出到C盘根目录。
在重启后切换到WinPE环境,把C盘根目录处理后的字体文件复制粘贴到C:\windows\fonts目录并替换,再重启进入正常的Windows环境,这样微软雅黑字体的渲染效果变得更加平滑。虽然与MacType的效果相比还有少许差距,但至少不再担心MacType占用系统内存的问题。
需要注意的是:
1、不是所有删掉hinting的字体都令人满意。
如:宋体(simsun.ttc),我觉得保留hinting反而比删掉的更好。
常用的英文字体(Arial、TImes New Roman、Tohama、Verdana、Calibri等)也没必要去掉hinting,反正去不去掉hinting视觉上的影响没那么明显。
2、显示器分辨率不超过1440x900,而且系统字体缩放比例是100%的话,劝你别试了。用默认的带hinting的字体反而使小字号字体显示更清楚。
附图1:去除hinting之前的微软雅黑(系统缩放比例100%)
附图2:去除hinting之后的微软雅黑(系统缩放比例100%)
附图3:去除hinting之后的微软雅黑(系统缩放比例125%)
附图4:有无hinting的微软雅黑小五、五号、小四、四号字体的表现:
以“重量”为例,去除hinting之前,在hinting的作用下各个笔画都在有限像素的空间内尽可能清晰呈现,可以看出hinting的实质是在各个字号里模拟点阵字,但牺牲了原来字体的设计,如“重”的第一笔是撇,但hinting的作用下全部变成横线。删掉hinting之后的字虽然在小字号情况下显得模糊,但笔画是正确的,忠实还原字体设计的本来面目。