传统屏幕是低分辨率显示器。
事实上,分辨率如此之低,以至于仅缩放字体字形在普通文本大小下就会出现可怕的像素化。因此,文本渲染系统不只是缩放文本,它们还会扭曲字形以使它们尽可能匹配像素限制(网格拟合)。
Microsoft 历来通过字体提示(智能字体 → TTF)实现了这一点:字体文件本身包含关于如何将每个字形形式扭曲为特定大小的说明(代码)。优点是您的文本渲染器不需要非常聪明。缺点是只有花大量时间编写提示规则的字体才能在屏幕上显示良好,而且只有在此人所针对的特定像素密度下(这就是为什么微软试图强迫制造商只生产 96 dpi 屏幕的原因)。
Apple 选择专注于哑字体(postscript 和 children → CFF 字体),并使用智能渲染引擎(对所有字体应用相同的规则)。
字体格式现在在 opentype (TTF + OTF) 中合并,但字体仍可以在哑模式(文本渲染器控制失真)智能模式(字体提示控制失真)或两者的混合模式下渲染.
由于 Linux 被禁止通过合法性访问 windows 字体,但仍托管许多为 TTF 字体编写的应用程序,Linux 文本渲染器能够为未提示的 TTF 字体即时计算合成提示。
对于智能手机和 hidpi 屏幕等高分辨率显示器而言,网格拟合并不重要。像素在缩放期间的舍入误差足够小,像素对齐不匹配可以忽略不计。
因此:
– Android:不需要提示字体,因为它用于高分辨率显示器,并且无论如何可能会自动计算提示,因为它是 Linux 变体
– Apple:从来没有 TTF 或提示导向,现在使用高分辨率显示器
– Windows:经常与低分辨率显示器一起使用,许多应用程序仍然使用旧的哑渲染堆栈,如果没有提示,将无法正确匹配网格
– ChromeOS 和 Linux:可以在低分辨率显示器上使用,可以自动计算提示,不一定需要提示字体,但 Google 可能会花钱请人手动提示字体,因此它认为内置提示更好(提示这些天来处理:使用Linux引擎自动计算提示,然后手动检查它是否运行良好,在需要时更正,将更正的计算添加到字体文件中。最好的自动提示产生干净的形状,但有时扭曲太多意味着字形词干,那是对齐,不再对齐,因为算法将一个形状移动到上部像素线,将下一个形状移动到下部像素线。人类确实更擅长识别和修复这种情况。
现代字体格式是用于取悦各种软件(通常:微软使用 A、Apple B、OS/2 C 和 Adobe D,让我们将 ABC 和 D 放入新格式,这样每个人都高兴. 除了 ABC 和 D 都有各自的缺点,让我们添加 E 更适合下一代软件)。 android 版本比 unhinted 版本要小一些,谷歌可能从这个版本中剥离了所有 Android 不使用的元数据。只要您只在 Android 上使用它,它就可以像未提示的版本一样工作,并且可以节省存储空间。