Core Graphics 提供默认图像过滤器以实现快速特效。以下是如何在预览中保存图像文件有效果。
苹果的核心显卡(Quartz) 2D 成像子系统提供高性能、一致的 API,用于创建、保存和操作图形。它还负责绘制 Apple 平台上的大部分文本(核心文本)。
即使特定显示器无法以完整的计算分辨率显示文本,Quartz 也可以使用子像素精度和抗锯齿(平滑)来绘制文本。
Quartz 范围很广,几乎涵盖了 Apple 操作系统上 2D 成像的各个方面,包括和macOS。 Quartz 是 Apple 最古老的框架之一,随 Mac OS X 一起首次亮相。
成像模型基于合成,其中多个图形层可以与透明度 (alpha) 组合、操作、转换、保存、打印或复制到显示器。
Quartz Compositor 负责图像组装和操作、组合图像以及旋转、应用变换或塑造图像。一旦最终图像组装完毕,显示引擎就会将图像移动(或“位块传输”)到显示器或打印机。
对于 macOS,Window Server 进一步处理图像的剔除和模糊处理,以确保发往特定窗口的显示图像仅保留在这些窗口中。
macOS Window Server 本身在组装窗口内容时使用 Quartz Compositor。
出于性能原因,Window Server 知道如何剪辑图像,以便仅绘制窗口中可见的部分。例如,当您在 macOS 中的窗口之间单击时,部分窗口就会被其他窗口遮挡。
通过在显示时剪切图像,Window Server 极大地提高了呈现性能,因为如果窗口的一部分被遮挡,它不必绘制窗口的全部内容。
当 Mac OS X 于 2000 年首次发布时,其图形引擎和框架是计算机行业中最先进的。
iOS 设备的工作原理与 Mac 类似,只是它们不像 macOS 那样使用专用的窗口服务器。两者都使用相同的 Quartz 框架和 API。
几乎所有关于iOS 设备使用 Quartz 进行绘制。这包括单个图像和图像文件,以及 macOS 本身的大部分内容及其窗口的内容。
在 Mac OS X Tiger 10.4 中,Apple 引入了 Quartz 2D Extreme,允许将 Quartz 图形卸载到专用 GPU。在 10.5 中,Apple 将 Quartz Extreme 重命名为 QuartzGL。
如果有专用 GPU,Quartz Compositor 还使用 QuartzGL 来加速渲染。
Apple 之前发布了一款名为 Quartz Composer 的应用程序,但现已停产。
Apple 的 Quartz Composer 应用程序。
基于几何
您在屏幕上看到的绘制或打印的内容只是 Quartz 实际计算的图形的近似值。 Quartz 在幕后使用数学模型来实际计算它将要绘制的图形 - 除非图形是作为预渲染像素页面存在的位图图像。
此类图形的数学模型有时称为矢量图形,因为它们首先使用几何图形进行计算,而不管它们如何显示或打印。
矢量图形具有可缩放至任何尺寸的巨大优势。要使图像变大或变小,只需以不同的比例重新计算图像,或在绘制图形之前应用缩放变换即可。
变换是应用于图像以改变其大小或形状的数学调整。当您在图像编辑程序中旋转或扭曲图像时,或者当您在空间中操纵 3D 对象时,您正在对模型应用变换,然后模型会重新绘制。
变换也可以应用于位图图像,尽管这通常会导致原始图像出现一定程度的失真。
贝塞尔曲线描述弯曲矢量图形,通常具有起点、控制点、一个或多个曲率以及可用于改变曲线形状的成形点或“手柄”。如果您曾经使用过矢量绘图应用程序(例如 Adobe Illustrator),您可能使用过贝塞尔曲线来更改对象的形状。
例如,字体使用贝塞尔曲线几何和矢量图来描述其轮廓(笔画),这些轮廓分别绘制每个字符。当您更改 macOS 文档中文本的字体或字体大小时,您将为绘制的每个字符重新应用新的计算。
macOS 中的每个字体文件都包含有关如何以给定字体绘制每个文本字符的说明。
石英显示服务
Quartz 包含另一个子系统,称为石英显示服务(QDS),主要关注硬件显示本身。 QDS 最初是一个非常小的 API,现在已扩展到数十个 API 处理:
- 定位和识别显示
- 更改显示属性
- 一次设置所有显示配置
- 捕获显示
- 显示器的流媒体内容
- 使用淡入淡出效果
- 切换显示镜像
- 应用伽玛和颜色校正
- 接收显示更改的更新
如果您曾经在系统设置应用程序中更改过显示器的分辨率或将主菜单栏移动到另一个显示器,那么您就使用过 QDS。
macOS 应用程序应包含用于接收显示更改通知的代码,以便它们可以为新的显示属性重新配置其窗口和窗口内容。
包含 macOS 菜单栏的连接显示器称为主显示器。每个显示器都分配有一个 DisplayID(32 位CGDirectDisplayID
) 在启动时由 macOS 执行。
数据类型
Quartz 定义了自己的一组绘图基元,用于图形计算(在 Core Graphics 文档中进行了描述)。这些基元包括从单个整数和浮点数、点、大小和矩形等几何形状到路径、向量和变换的所有内容。
还有显示上下文、图像(用于位图)、图层以及颜色和字体。显示上下文定义为您可以在其中进行绘制的图形环境。
通常,每个显示器都有一个绘图上下文,但也可以有其他屏幕外和复合上下文。
您还可以更改绘图上下文的属性,以在重绘上下文时更改其内容的外观。
大多数这些数据类型都是由简单的单个类型组成的。例如,一个CGPoint
在 Quartz 中被定义为包含两个双精度浮点数的结构:一个 X 坐标和一个 Y 坐标。一个CGPoint
描述显示或上下文上的任何单个点。
一个CGRect
由另外两种石英类型组成:CGPoint
(起点)和CGSize
(方面)。大多数 2D 计算机图形系统中的绘图起点称为起源。
一些 2D 系统测量从左上角到右下角的距离,其他系统从左下角到右下角测量距离。
石英还定义了层数(CGLayer
),每个都可以单独绘制、组合绘制和动画绘制。
另一个名为 Core Animation 的 Apple 框架可以使用图层(CALayer
)同时平滑地将多个图形层动画化。
Adobe PDF 便携式文档文件。
PDF 文件
PDF 文件在 Apple 平台上与 Quartz 分开处理 - 除了要显示或打印的最终渲染。这是因为 PDF 最初是使用 PostScript 进行渲染的 Adobe 标准。
NeXT 计算机有一个基于 PostScript 的类似系统,称为显示后记它使用 Adobe 技术进行显示和打印渲染。 PostScript 还在其图形计算中使用矢量图形,以提供任何比例的平滑绘图。
虽然 PDF 不是 Apple 技术,但 Quartz 为 PDF 提供了一种数据类型,称为CGPDFDocument
。该数据类型从另一个名为的 Quartz 类型获取其内容CGDataProvider
。
使用这两种数据类型,您可以创建 PDF 文档的表示形式以供显示或打印。您还可以初始化一个CGPDFDocument
直接来自文件或 URL。
CGPSConverter
是一种 Quartz 类型,可用于直接在 PDF 和旧 PostScript 代码之间进行转换。较旧的打印机在其 ROM 中嵌入了 PostScript,因此可以接收和打印 PostScript 和 PDF 文件。
Apple 还有其他几个用于图像和文件操作的框架,包括 ImageKit、PDFKit、Quartz Composer(现已基本弃用)和 Quick Look。
石英和预览
macOS 的预览应用程序本质上是一个 Quartz 和 PDF 渲染应用程序,它也知道如何显示位图图像。
Preview 使用 Quartz 来合成和显示文件和图像,就像 macOS 一样。它可以执行所有绘图命令并转换任何其他 Quartz 应用程序可以执行的操作。
它还知道如何将 PDF 和 PostScript 文件直接渲染到窗口中 - 以及如何将它们发送到激光或喷墨打印机。当您在预览中打开 PDF 文件时,它会使用 Quartz API 来呈现要在 Apple 本机系统中在屏幕上绘制的 PDF 绘图命令。
石英和过滤器
一旦一切都准备好显示,石英过滤器(CIFilter
)可用于在显示、保存或打印图形和图像文件时使用特殊效果。 PDF 还可以使用 Apple 的 ColorSync 技术应用图像滤镜。
Quartz 提供了一组预定义的标准滤镜,本质上将熟悉的摄影类型效果应用于图像 - 但也可以定义和应用自定义滤镜。 macOS 还包含一个过滤器管理器,用于添加、删除和管理图像过滤器。
CIFilter 可能很复杂,但仅依赖于两种 Quartz 数据类型:CIImage
和CIContext
。 CIImage 本质上是一个图像生成器,它要么将现有图像作为输入,要么将其绘制到 CIContext 中以生成新图像。
您不必担心如何使用 CIFilter 修改图像 - Apple 内置了所有这些代码:您只需选择要使用的过滤器,并指示要修改的现有图像或绘图上下文,Quartz 就会完成它的操作事物。
这还标准化了滤镜效果,因此只要使用 Quartz API,它们就可以在 Mac 平台的软件中保持一致。
应用所选过滤器后,会出现一个新的过滤器CIImage
输出可供使用。您还可以申请CIColor
更改图像的整体色偏。
Apple 还提供了用于几何变化、合成、渐变、镜头效果等的内置滤镜。所有内置过滤器均使用以“CI”开头的常量按类别分组。一组称为CICategoryStylize
提供了数十种使图像看起来像照片、新闻纸、漫画和彩色玻璃的方法。
您可能在 Adobe Photoshop 等应用程序中见过这些类型的效果。
现在有数百个Apple定义的Quartz过滤器,在Apple SDK头文件中有详细介绍CIFilterBuiltins.h
。但查看所有过滤器类型的更好方法是访问第三方核心图像过滤器参考诺亚·吉尔摩 (Noah Gilmore) 的文档项目。
Gilmore 还提供了五星级 Core Image 参考应用程序,用于于被称为CIFIlter.io(5 美元)其中为您详细介绍了 Apple 内置过滤器。网站和应用程序都会显示每个过滤器可在哪些版本的 iOS 和 macOS 上使用。
CIFilter.io 应用程序中的 Apple CIThermal 过滤器,作者:Noah Gilmore。
在预览中应用过滤器
不幸的是,macOS 的预览应用程序仍然不是功能齐全的图像编辑器。虽然您可以执行一些基本操作,例如调整大小和旋转,但它目前不支持一般滤镜效果。
这太糟糕了,因为苹果已经提供了操作系统中的所有过滤器。目前,您在预览中所能做的就是绘制基本线条和形状、调整颜色以及添加文本。
然而,在预览中您可以做的是在保存文件时应用过滤器 - 但仅限于一小部分选定的预定义过滤器。事实上,该组是一组预定义的 ColorSync Core Image 滤镜,位于 /Library/ColorSync/Profiles 中并随 macOS 一起提供。
为此,请执行文件->保存或者另存为,然后从石英过滤器菜单中,选择可用的过滤器之一(如果文件格式支持):
选择文件名、位置、格式和 Quartz Filter(如果格式支持)。
单击节省按钮保存文件。
预览尚不支持在保存时将过滤器应用于所有文件类型 - 包括 .PNG 文件。预览中提供的大多数过滤器节省工作表用于转换为黑白、灰度、棕褐色、更改亮度和优化文件大小。
对于 PDF,还有一个自定义过滤器,用于将文件另存为 PDFX-3 文档,主要用于专业打印。
虽然此设置有限制,但它是保存时修改图像文件的快速且简单的方法。希望苹果能够扩展该集合以包含更多预定义的过滤器和更多的文件类型。
核心图像是一个令人着迷的主题,并且非常简单和有用。如果苹果未来选择在 macOS 和 iOS 中扩展对它的支持,那就更是如此了。
如果您对 Apple 平台上的 Quartz 编程感兴趣,请参阅旧文档Quartz 2D 编程指南。还有一本很棒的第三方书籍,名为使用 Quartz 编程:Mac OS X 中的 2D 和 PDF 图形。