字体引擎的渲染性能

虽然字体设计时是矢量的,但显示和印刷设备终究还是点阵/光栅式的。字体引擎是一种将矢量字体中的信息转换为适合在屏幕或打印机上输出的光栅图像的软件。

字体引擎的工作步骤

如上图所示,字体引擎的工作步骤大致如下:

  1. 将字体的主轮廓缩放到适当的大小;
  2. 将轮廓按照字体文件中的相关说明对齐网格;
  3. 光栅化(Rasterization):网格拟合轮廓被扫描转换为适合光栅显示的位图图像。

一、缩放主轮廓

缩放器通过将主坐标系中的 FUnit 值乘以比例,将其转换为像素坐标系中的值。此比例为:

pointSize * resolution / (72 points per inch * units_per_em).

其中pointSize是字形的显示尺寸,resolution是输出设备的分辨率,units_per_em是最初定义主轮廓的网格的分辨率。分母中的 72 表示每英寸的点数。

例如,假设字形设计的长度为 550 FUnits,并在每 em 方块中有2048 FUnits 的主网格上定义。以下计算表明,在 72 dpi 屏幕上,18 号的字形大小为 4.83 像素。

550 * [(18 * 72)/(72 * 2048)] = 4.83

二、对缩放轮廓进行网格拟合

一旦将特定字形的主轮廓缩放到所需的大小,就可以执行与该字形相关的指令。指导字形的两个主要目标是消除网格偶然关系的影响并控制关键尺寸。有关更多信息,请参阅指导字体。

如前所述,执行字形指令的一个关键效果是将描述字形的缩放轮廓点移动到新位置。一旦移动,点就被称为网格拟合。它们的坐标表示为坐标网格中的 (x,y) 位置。

由于指令在主轮廓缩放后运行,因此其效果取决于所请求字形的实际大小和分辨率。图 4 显示了通过执行相关字形指令从该主轮廓生成的主轮廓和两个网格拟合轮廓。通过首先将主轮廓缩放到每 em 12 像素然后执行字形指令生成的网格拟合轮廓与通过首先将主轮廓缩放到每 em 18 像素然后执行字形指令生成的网格拟合轮廓不同。

这些指令不需要特定于大小或分辨率,因为它们引用原始主轮廓中存在的点。它们的操作基于对字形特征的几何分析,并且与大小和分辨率无关。此规则的例外是本章后面描述的特定于大小和分辨率的 DELTA 指令。

字体引擎内部的工作细节,例如如何对其网格、如何将点还原成轮廓、如何界定轮廓的哪一步分需要填充等,文档中花了很大的篇幅来介绍,本文不多描述。这里有一个要说明的点:在光栅化的时候,会把在轮廓上和轮廓内的像素中心点填充,但是如果轮廓占用了某一个或多个像素却没有穿越中心点(如下图),甚至一些特殊情况,则会根据一套规则来判断哪些像素点需要填充。光栅化的规则如下文所示。(例如下图中的情况会填充靠左侧的像素点。)

三、光栅化

不同的操作系统和应用程序可能使用不同的字体渲染引擎,这会影响 TrueType 和 OpenType 字体的渲染效果。

  • TrueType 字体由于其简单性和广泛的支持,通常在渲染性能上非常高效。
  • OpenType 字体由于包含更多的数据和特性,可能需要更多的处理能力来进行渲染,尤其是在使用其高级特性时。

不同操作系统中字体的渲染方式有其特定的设计和优化,以下是一些主流操作系统中字体渲染方式的具体分析:

  1. Windows
    • Windows 使用 GDI (Graphics Device Interface) 和 DirectWrite 两种不同的渲染技术。
    • GDI 是早期的渲染技术,它使用像素网格对字体进行渲染,可能导致在某些尺寸下的字体边缘出现锯齿。
    • DirectWrite 是一种更现代的文本布局和渲染技术,支持 ClearType 渲染,这是一种次像素渲染技术,可以提高LCD屏幕上的文本清晰度。
  2. macOS
    • macOS 使用 Quartz 文本渲染技术,它基于 Core Graphics 框架。
    • Quartz 支持抗锯齿和次像素渲染,提供平滑的字体边缘,尤其在苹果的Retina显示屏上效果显著。
    • macOS 还支持 Font Smoothing 技术,允许用户根据个人喜好调整字体平滑的程度。
  3. Linux(以 GNOME 和 KDE 桌面环境为例):
    • Linux 桌面环境通常使用 FreeType 库来渲染字体。
    • FreeType 支持多种抗锯齿技术,包括灰度渲染和次像素渲染。
    • 某些Linux发行版可能使用特定的渲染设置来优化字体显示,例如,通过调整渲染子像素的顺序来适应不同的显示技术。
  4. Android
    • Android 使用 Skia 图形引擎来渲染字体,Skia 支持多种渲染技术,包括抗锯齿和次像素渲染。
    • Android 的字体渲染也支持动态调整,以适应不同的屏幕密度和分辨率。
  5. iOS
    • iOS 使用 Core Text 框架进行字体渲染,它基于 Apple 的文本渲染技术。
    • Core Text 支持多种字体渲染选项,包括抗锯齿和次像素对齐,以确保在Retina显示屏上的文本清晰度。
  6. Web浏览器(跨平台):
    • 现代Web浏览器使用不同的字体渲染引擎,如 Blink(Chrome 和 Edge)、WebKit(Safari)和 Gecko(Firefox)。
    • 浏览器支持 CSS 属性,如 font-smoothingtext-rendering,允许开发者控制字体渲染效果。
    • 浏览器还支持 WOFF (Web Open Font Format) 和 WOFF2,这些是专为网络优化的字体格式,提供了更好的压缩和渲染性能。
  7. 电子阅读器和墨水屏
    • 电子阅读器如 Amazon Kindle 使用 E-Ink 技术,这种技术不涉及传统意义上的字体渲染,因为它不使用背光或彩色显示屏。
    • 字体在电子阅读器上显示为固定图像,通常使用高对比度来确保在不同光照条件下的可读性。

每种操作系统的字体渲染方式都旨在提供最佳的阅读体验,同时考虑到性能、屏幕技术和其他因素。随着显示技术的发展,字体渲染技术也在不断进步,以适应更高分辨率和更多样化的显示设备。

https://www.skywind.me/blog/archives/1541

The Type — 视觉分辨力与 Retina Display
现有 iPhone 屏幕与 Regina Display 屏幕使用次像素抗锯齿渲染对比示意 更正:感谢 Apple4us 的 Rio 指正本文,实际上在 iPhone OS 之中,次像素渲染技术并未启用(甚至在 Mac OS X 上面,次像素渲染也并非会在所有 LCD 显示器上默认开启)。究其原因,也许是考量到屏幕旋转后次像素排列的方向变化会导致渲染结果不佳(但是在 iPad 上模拟的效果看来并无显著区别),或者苹果认为启用次像素渲染所带来的收益不能抵消其能耗。以下文字中关于次像素渲染的部分烦请忽略。 如果不考虑盲文和有声书,阅读的基础是「看」。视觉是阅读的最基本条件,优秀的字体与排印产品也主要是通过视觉来取悦读者。但是,就像人耳不能区分音高差异极小 1 的两个声音,视觉也有其分辨极限。十九世纪末人们就通过研究 2 发现,想要在一定条件下将两条明暗相间的细线区分开来,它们之间需要有 0.59 角分(arcminute)的差距。0.59 角分在 10 英寸的距离上大致相当于 0.0017 英寸,取其倒数 583,再考虑到两条细线各自需要至少一明一暗两个点,我们可以合理地推论,当印刷品的墨点密度达到每英寸 1200 点(1200 Drops Per Inch, DPI)以上,就可以满足相当挑剔的阅读要求。所以目前比较优秀的家用打印机,都标称能够达到 1200 乃至 2400 DPI 的分辨率,这样的印刷品质量已经与传统的、墨点密度可以视作无限的凸版印刷相媲美。当然,如同黑胶唱片,凸版印刷自有另一番独特的趣味,不过这已经超出了本文的范围。 眼睛分辨能力的极限是 0.59 角分 十几年前的数码印刷便可以达到 300 DPI 的墨点密度,这一数值虽然并不理想,但对于细节反差相对较小的非文本类图像来说,它基本上达到了要求。这也就是为什么在 Photoshop 等程序中创建用于印刷用的文档时,默认分辨率会被设定为 […]
字体抗锯齿-CSDN博客
文章浏览阅读567次。字体抗锯齿1、-webkit-font-smoothing控制的字体渲染只对MacOS的webkit有效。所以,你在MacOS测试环境下面设置-webkit-font-smoothing时,只要你不把它设置为none,怎么好看就设置为什么属性,反正这个属性仅仅是面向MacOS,不会在其他上下文中出岔子的(除了none的情形)。2、前端控制字体渲染的接口非常匮乏,如果可能,尽可能的控制输出的字体,而非控制字体渲染。3、以下测试则会表明,-webkit-font-smoothing在MacOS上才有_字体抗锯齿
字体平滑,反锯齿,和次像素渲染(译文) - 阮一峰的网络日志
Font smoothing, anti-aliasing, and sub-pixel rendering
Apple and Microsoft have always disagreed in how to display fonts on computer displays. Today, both companies are using sub-pixel rendering to coax sharper-looking fonts out of typical low res…