Monday, September 18, 2017

在 Windows 10 下使用无 hinting 的 TrueType 版思源字体

我用过 GDI++ 和 MacType,终究觉得各种小毛病和始终得看微软爸爸脸色造成的烦心大过了好处,遂放弃。之后我一直坚持认为:不装 MacType 的话,Windows 下能看的简体中文字体只有微软雅黑了……直到我后知后觉发现了无 hinting 的 TrueType 版思源字体。

字体的渲染原理我不懂,只是看起来,直接把原版的思源字体(Open Type PostScript)放在 Windows 下用,效果是很糟糕的,转换成 TrueType 才能看,而且最好去掉字体中的 hinting 信息,否则小字号下会有各种扭曲变形的现象。

下面是方法。

首先把全部你需要用到的思源字体下载下来。因为接下来要用到的转换工具不支持 OTC 字体包,在浏览器上用考虑到多语言混排需要完整字形覆盖,所以我们这里选择“Language-specific OTFs”。目前思源黑体、思源宋体全部加起来一共有 64 个(包含所有语言、字重以及 HW 版本)。

转换用的工具是 otfcc。首先在这里下载已编译的 Windows 版,解压后把两个 exe 文件放在和原版字体同一文件夹内。然后安装 Node.js,需要最新的 v.8.5.0 版。随后在命令行(cmd.exe)下运行

npm install -g otfcc-c2q

来安装 otfcc-cubic2quad

接下来运行命令来转换字体就好啦,格式是这样:

otfccdump input.otf | otfcc-c2q | otfccbuild -o output.ttf

需要批量处理的话,这里提供一个(比较土的)方法:

在命令行下进入你存放字体的目录,运行

dir /b > filenames.txt

打开目录下生成的 filenames.txt 文件,通过查找替换删除所有的“.otf”(将“.otf”替换为空)。

回到命令行下,运行

for /F "tokens=*" %A in (filenames.txt) do otfccdump %A.otf | otfcc-c2q | otfccbuild -o %A.ttf

转换全部 64 个字体大约需要一两个小时的时间。转换完成后,把原版的 otf 字体删掉,把得到的 ttf 字体安装到系统中,然后用就是了。

在浏览器里我是这么设置的:简体中文、繁体中文、日文和韩文,分别使用对应语言版本的思源黑体(无衬线)、思源宋体(衬线)和思源黑体 HW(等宽)。Chrome 需要另外安装字体高级设置的扩展(Advanced Font Settings)才能分别对不同语言进行设置。另外 Chrome 目前在指定思源黑体时必须选择一个字重而不能指定字体族名,导致只能使用一个字重。这个问题有一个非常土而暴力的办法解决,详见这里

欢迎各种纠错和建议。不过,如果是“DirectWrite 是垃圾!字体糊成这样能看?”这种就算了。