FreeType 2.7 – 卓越的 Linux 字体质量
大家好!我是大聪明-PLUS!
FreeType 2.7 版本悄无声息地发布,这无疑是 Linux、FreeBSD、NetBSD、ReactOS 和其他用户的一次盛大庆典。让我们来探究一下这一切喧嚣的真正原因。FreeType是一个用于字体光栅化和操作的开源 C 库。新版本TrueType
默认使用 v40 指令处理算法。
这允许使用类似于微软的高质量子像素字体抗锯齿技术,DirectWrite/ClearType
但实际上并未使用子像素抗锯齿技术。此外,v40 算法Infinality
比之前的 v38 算法渲染速度更快,而最终结果却丝毫不差。
Infinity、专利和SHG
从历史上看,Linux 上的字体存在两个问题。首先,微软和苹果的专利雷区,迫使开发人员费力地寻找变通方案。一系列补丁Infinality部分解决了这个问题,但却以性能下降和代码过于复杂为代价。此外,据维护者称,FreeType
开发人员Infinality
对该项目失去了兴趣。
这些专利可分为三类有条件的类别:
- 显示图像时,信息显示在单个 LCD 子像素级别,而不是整个像素级别
- 应用各种滤镜后显示相同的图像,例如抑制彩色边纹伪影
- 在丰富多彩的亚像素世界中处理尺寸和距离
不仅如此,还有其他专利。这种情况的妙处在于,微软和苹果签署了交叉许可协议,而开发者FreeType
和其他开源软件开发者则必须勇敢地克服SG带来的障碍。
这些专利的价值备受质疑。微软获得 ClearType 专利后,其有效性和新颖性立即引发质疑,而这这并非出现在某个冷门论坛,而是《纽约时报》的报道。史蒂夫·吉布森 (Steve Gibson) 是其中一位积极反驳 ClearType 的人士,他在自己的网站上写道,ClearType 是一项早已被遗忘的技术,由史蒂夫·沃兹尼亚克 (Steve Wozniak) 于 20 年前为 Apple II 申请专利。它并没有任何重大的技术突破,因此也算不上知识产权。
微软的“ClearType”子像素文本渲染应用并不代表他们所声称的重大突破,因此它不能成为知识产权收购的有效主题。
不幸的是,美国专利法的结构使得所有这些都只是个空谈。无论好坏,专利都存在,这意味着其他人必须为使用专利付费。
请允许我稍微感慨一下。微软并不急于将其 ClearType 专利移交给开源社区,就像 Adobe 将其引擎专利移交给开源社区一样。下次我们看到微软的“Linux 之心”OpenType/CFF
口号时,不妨记住这一点。效仿美国总统里根,人们或许会惊呼:“纳德拉先生,如果微软热爱 Linux,那就推倒那些专利墙吧!”
TrueType 的新渲染
Linux 字体的第二个问题是 20 世纪 90 年代 CRT 显示器软件字体渲染算法的遗留问题。该TrueType
字体家族诞生于 CRT 显示器颗粒感强烈的时代。在 Windows 95 的屏幕截图中,文本是像素化的。每个单独的字形都被固定在像素网格内。微软为此投入了无数的人力,计算和优化所有可能尺寸的字形,以便所谓的核心网络字体(Arial, Times New Roman, Courier New
等等)在屏幕上看起来能够令人满意。
然而,这种徒劳无功的劳动也带来了后果。液晶显示器的新时代来临了,原来旧的TrueType指令必须重新编程才能利用这些新功能,或者至少要正确显示字体。没有必要将每个字形映射到一个全像素网格;相反,他们可以将它们映射到三个子像素中的一个,甚至只是一个子像素,通过子像素抗锯齿实现更高质量的图像TrueType。微软合理地认为重写整个遗留指令集是不现实的,因此提出了非对称过采样和兼容模式,利用了旧字体指令中的许多巧妙技巧和变通方法。这使得即使是较旧的字体也可以在一定程度上利用增加的水平分辨率。
开发人员FreeType
决定不去管这个问题,直接忽略了兼容模式。这当然带来了一些后果。新字体在适应了这种蹩脚的兼容模式和异步过采样之后,看起来非常尴尬。
然而,一位英雄走了这条艰难的道路,实现了Infinality
上述所有新旧指令的混乱局面。FreeType
它一度包含 v38 解释器(一组补丁Infinality
),但后来代码被移除,取而代之的是 v35 解释器。这位开发人员Infinality
真正承担了一项不可能完成的任务:让字体看起来比 Windows 更好,并使其完全可自定义。
让字体像在 Windows 上通过 DirectWrite/ClearType 渲染一样,其核心秘诀在于:这里实际上没有进行子像素提示。震惊!代码只是忽略了所有水平提示指令。
最终,通过删除Infinality
[ ...FreeType
TrueType
如何使用 FreeType 2.7 实现字体和谐
好消息是,您无需执行任何操作;更新将自动出现在您的 Linux 或 BSD 发行版的软件仓库中。只需更新到新版本并重新启动 X.Org 服务器即可。您可以根据自己的喜好进行配置。坏消息是,您现在就需要它,等待几天甚至几周可能会很麻烦。特别不耐烦的用户可以从源代码FontConfig
自行编译新版本,也可以使用内置的软件包安装程序进行安装。我的 Gentoo 安装尚未稳定。FreeType 2.7
$ eix freetype
$ [I] media-libs/freetypeДоступные версии: (2) 2.5.5^d 2.6.3-r1^d ~2.6.5^d ~2.7-r1^d{X +adobe-cff auto-hinter bindist bzip2 (+)cleartype_hinting debug doc fontforge harfbuzz infinality png static-libs utils ABI_MIPS="n32 n64 o32" ABI_PPC="32 64" ABI_S390="32 64" ABI_X86="32 64 x32"}
对于保守的 Debian,我们可能要等待下一个版本,但 Ubuntu 用户已经很好地使用了字体,所以没有必要着急。