在預覽中儲存影像時如何在 macOS 中套用 Quartz 濾鏡

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 物件時,您正在對模型套用變換,然後模型會重新繪製。

變換也可以應用於點陣圖影像,儘管這通常會導致原始影像出現一定程度的失真。

貝塞爾曲線描述彎曲向量圖形,通常具有起點、控制點、一個或多個曲率以及可用於改變曲線形狀的成形點或「手柄」。如果您曾經使用過向量繪圖應用程式(例如 Adob​​e Illustrator),您可能使用過貝塞爾曲線來變更物件的形狀。

例如,字體使用貝塞爾曲線幾何和向量圖來描述其輪廓(筆畫),這些輪廓分別繪製每個字元。當您變更 macOS 文件中文字的字體或字體大小時,您將為繪製的每個字元重新套用新的計算。

macOS 中的每個字體檔案都包含有關如何以給定字體繪製每個文字字元的說明。

石英顯示服務

Quartz 包含另一個子系統,稱為石英顯示服務(QDS),主要關注硬體顯示本身。 QDS 最初是一個非常小的 API,現在已擴展到數十個 API 處理:

  1. 定位和識別顯示
  2. 更改顯示屬性
  3. 一次設定所有顯示配置
  4. 捕獲顯示
  5. 顯示器的串流內容
  6. 使用淡入淡出效果
  7. 切換顯示鏡像
  8. 應用伽瑪和顏色校正
  9. 接收顯示變更的更新

如果您曾經在系統設定應用程式中更改過顯示器的解析度或將主選單列移至另一個顯示器,那麼您就使用過 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 進行渲染的 Adob​​e 標準。

NeXT 計算機有一個基於 PostScript 的類似系統,稱為顯示後記它使用 Adob​​e 技術進行顯示和列印渲染。 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 資料類型:CIImageCIContext。 CIImage 本質上是一個圖像生成器,它要么將現有圖像作為輸入,要么將其繪製到 CIContext 中以產生新圖像。

您不必擔心如何使用 CIFilter 修改圖像 - Apple 內建了所有這些程式碼:您只需選擇要使用的過濾器,並指示要修改的現有圖像或繪圖上下文,Quartz 就會完成它的操作。

這也標準化了濾鏡效果,因此只要使用 Quartz API,它們就可以在 Mac 平台的軟體中保持一致。

套用所選過濾器後,會出現一個新的過濾器CIImage輸出可供使用。您還可以申請CIColor更改影像的整體色偏。

Apple 還提供了用於幾何變化、合成、漸變、鏡頭效果等的內建濾鏡。所有內建篩選器均使用以「CI」開頭的常數按類別分組。一組稱為CICategoryStylize提供了數十種使圖像看起來像照片、新聞紙、漫畫和彩色玻璃的方法。

您可能在 Adob​​e Photoshop 等應用程式中見過這些類型的效果。

現在有數百個Apple定義的Quartz過濾器,在Apple SDK頭檔中有詳細介紹CIFilterBuiltins.h。但查看所有過濾器類型的更好方法是訪問第三方核心影像濾鏡參考諾亞·吉爾摩 (Noah Gilmore) 的文檔項目。

Gilmore 還提供了五星級 Core Image 參考應用程序,用於於被稱為CIFlter.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 圖形