跳到內容
getnextpdf.com

色彩、設定檔,以及為什麼你的紅不是我的紅

Spec: ISO 32000-2, §8.6Spec: ISO 15930, PDF/X

PDF 中的色彩並不是一種固定的感受。它是一道指令,而這道指令是否會在你的筆電、手機與印刷機上產生同一種紅色,完全取決於該色彩是怎麼被描述的。本頁談的是兩者之間的差別:一種色彩只是告訴裝置該做什麼,而另一種色彩說明它實際應該看起來如何。

選一個品牌紅,把它設定好。現在看看它在一台廉價辦公螢幕上的樣子,再看它在明亮房間裡的 OLED 手機上的樣子,最後看它從一台平版印刷機上印出來的樣子。三種紅。有時是明顯不同的三種紅。沒有人改過那個數字;那個數字從來就不是故事的全部。

對一份隨手的文件來說,這只值得聳聳肩。但對一個商標、一張受規範的標籤、一份型錄裡的照片,或一份要保存數十年的紀錄而言,會漂移的色彩就是一項缺陷。代價並不抽象:它是一次重印、一份被退回的打樣,或一個其頁面不再與原件相符的封存庫。解方不是一個更好的數字,而是把那個數字的意義誠實地說出來。

  • 裝置色彩以裝置所收到的控制值來命名一種色彩,因此結果就是那台裝置怎麼解讀它們(Spec: ISO 32000-2, §8.6.4)。DeviceRGBDeviceCMYKDeviceGray 都是裝置色彩空間。相同的數字,不同的硬體,不同的色彩。
  • 經校正、以 ICC 為基礎的色彩透過一個內嵌設定檔,把那些數字繫結到一個經測量、與裝置無關的參考(Spec: ISO 32000-2, §8.6.5.5)。如今文件攜帶了足夠資訊,能重現預期的色彩,而不只是一份控制值的配方。
  • ICC 設定檔就是那份經測量的對應:一台裝置的數字——或一個標準色彩空間或輸出條件的數字——如何與人眼會感知到的色彩產生關聯,並繫結到一個與裝置無關的連接空間。
  • 彩現意圖是一項政策,用以決定當某個色彩超出裝置可及範圍時該怎麼辦,因為沒有任何裝置能顯示出所有色彩。
  • 輸出意圖是文件預先宣告它所準備面對的輸出條件(Spec: ISO 32000-2, §14.11.5)。印刷等級(PDF/X)與封存(PDF/A)流程都仰賴它。

從這個問題誠實的版本開始。DeviceRGB 並不包含一種色彩。它包含三個介於 0 與 1 之間的數字,以及一個未明說的假設:某個螢幕會把它們轉化為光。兩台具有不同背光、不同面板與不同校正的螢幕,會把同樣三個數字轉化為肉眼可見地不同的光。這不是 PDF 的瑕疵。這正是「裝置色彩」的含義,而標準對此坦白以告:裝置色彩空間是由裝置所收到的值來定義,而非由某種絕對的外觀來定義(Spec: ISO 32000-2, §8.6.4)。

經校正的色彩藉由加入一個參考來彌合這道落差。一個 ICC 設定檔,是對一台裝置或一個色彩空間——一台螢幕、一台印表機、一台印刷機,或像 sRGB 這樣的標準空間——進行特性化後的結果,並記錄其原始數字如何與一個近似人類視覺、與裝置無關的連接空間中的色彩產生關聯。內嵌那份設定檔,那些數字就不再是一種私有方言;它們成為一個繫結到人人都能認同之物的陳述。這正是以 ICC 為基礎的色彩空間所攜帶的內容(Spec: ISO 32000-2, §8.6.5.5):色彩,加上那份說明它意義的測量對應。

還有第二個無可迴避的曲折。一台印刷機能印出的色彩集合,並不是一支手機能顯示的集合,兩者也都不是人眼所能看見的完整集合。當一個色彩落在目標裝置能重現的範圍之外時,就必須做出某種抉擇:把它截切到最接近的可及色彩,或是把一整段色彩一起位移,使它們之間的關係維持完整。那項抉擇就是彩現意圖——一項為工作而選定的審慎政策,而不是捨入造成的意外。一張照片與一個企業商標往往需要不同的意圖,因為前者在意平滑的漸層,後者在意命中一個精確的色樣。

最後,一份要前往某個特定去處的文件可以把這件事說出來。輸出意圖就是檔案宣告它所準備面對的輸出條件——通常是一個內嵌的 ICC 目標設定檔,用以指明一種印刷條件或裝置(Spec: ISO 32000-2, §14.11.5)。它是「交給印刷廠一份檔案」與「交給他們一份說著『我是為這台印刷機而打造的』檔案」之間的差別。印刷交換設定檔讓它成為強制要求:一份 PDF/X 檔案(ISO 15930 系列)必須攜帶一個輸出意圖(Spec: ISO 15930, PDF/X),而 PDF/A 也仰賴同樣的機制,使一份封存檔案的裝置相依色彩在久遠的未來——遠在原始環境消失之後——仍然可被解讀。

  1. Name the colourChoose a colour space. DeviceRGB/CMYK/Gray name control values; an ICC-based space anchors them to a device-independent reference (ISO 32000-2 §8.6).
  2. Anchor it (optional but decisive)Embed an ICC profile so the numbers carry their measured meaning, not just a device recipe (ISO 32000-2 §8.6.5.5).
  3. Reconcile to the deviceA rendering intent decides what happens to colours the target device cannot reproduce — clip the nearest, or shift the range to preserve relationships.
  4. Declare the destinationAn output intent states the output condition the document was prepared for, as PDF/X and PDF/A workflows require (ISO 32000-2 §14.11.5).
一個色彩如何從你的程式碼一路抵達忠實的結果:它在一個色彩空間中被命名,可選地由一個 ICC 設定檔繫結到一個經測量的參考,透過一個彩現意圖調和到目標裝置,並對照文件所宣告的輸出條件加以解讀。

NextPDF 在這條鏈中的職責是做到符合標準:以格式所定義的方式寫出色彩空間、內嵌設定檔與輸出意圖,讓下游工具——一台印刷廠的 RIP、一個封存驗證器、一個檢視器——讀到的正是當初所預期的內容。它產生那些宣告;它不會假裝自己就是裝置。

下方的形狀勾勒的是這項抉擇,而不是某個特定 API。重點在於:去處是被陳述出來的,而不是被猜測出來的。

<?php
declare(strict_types=1);
use NextPDF\Contracts\PdfDocumentInterface;
/**
* Prepare a print-bound document that declares its intended output condition.
*
* The colour numbers alone do not fix the appearance. Declaring the output
* intent — the print condition the file was built for — is what lets a press
* interpret those numbers faithfully (ISO 32000-2 §14.11.5).
*
* @param PdfDocumentInterface $doc A composed document.
* @param string $iccProfileBytes The destination ICC profile for the
* target print condition.
*
* @return string The document bytes, carrying a declared output intent.
*/
function prepareForPress(
PdfDocumentInterface $doc,
string $iccProfileBytes,
): string {
// Declare the output condition explicitly. The document now states the
// device/print condition it was prepared for, instead of leaving its
// device colours open to interpretation.
$doc->setOutputIntent(
identifier: 'Custom press condition',
iccProfile: $iccProfileBytes,
);
return $doc->output();
}

色彩沒有改變。改變的是檔案如今說出了它們本應看起來的樣子,而這正是一台印刷機或一個驗證器唯一能據以行動的東西。

「它是同一個十六進位值,所以是同一種色彩。」十六進位值是一組裝置控制值。沒有設定檔或輸出意圖,它就是一份未指定廚房的配方——它在每一間廚房裡都會嚐起來不同。兩份檔案可以攜帶完全相同的 RGB 數字,卻誠實地是不同的色彩,因為其中一份宣告了賦予這些數字意義的脈絡,另一份則把它交給了運氣。

第二個陷阱:假設 DeviceCMYK 自動就代表「印刷就緒」。它並不代表。CMYK 仍然是裝置色彩;它是依印刷形塑而成,但在某個設定檔或輸出意圖指明實際的印刷條件之前,它並未經過校正。

NextPDF 產生符合標準的色彩:它以格式所定義的方式,寫出裝置色彩空間與以 ICC 為基礎的色彩空間,並為 PDF/X 式與 PDF/A 流程宣告輸出意圖。那是這份工作中產生的那一半,也是一份文件能夠擁有的那一半。

NextPDF 不是一套色彩打樣系統。它不會量測你的螢幕、不會在螢幕上軟打樣模擬一台印刷機,也不會在某個容差範圍內認證印刷結果與某個預期色樣相符。那些屬於一條色彩管理的打樣鏈,以及操作它的人們。引擎讓檔案說出正確的內容;至於最終裝置是否會遵循它,則由下游決定——由裝置、由起作用的 ICC 設定檔,以及——對 PDF/X 與 PDF/A 而言——由一個驗證器決定,而非由產生者決定。

  • PDF 究竟是什麼——這些色彩空間與輸出意圖所棲身的物件模型。
  • 封存與 PDF/A——為什麼長期保存仰賴與裝置無關的色彩及輸出意圖。
  • 標準全景——ISO 32000-2、PDF/X(ISO 15930)與 PDF/A(ISO 19005)彼此之間的相對位置。
  • PDF 2.0:有什麼變動——當前的格式版本如何看待色彩與符合性。
  • 裝置色彩空間——以裝置所收到的控制值來命名的一種色彩(DeviceRGBDeviceCMYKDeviceGray);其外觀取決於進行解讀的裝置(ISO 32000-2 §8.6.4)。
  • 經校正/以 ICC 為基礎的色彩——透過一個內嵌的 ICC 設定檔,繫結到一個與裝置無關的參考,使預期外觀能跨裝置重現(ISO 32000-2 §8.6.5.5)。
  • ICC 設定檔——一個特定裝置的數字與一個近似人類視覺、與裝置無關的參考之間,經測量的對應。
  • 彩現意圖——用以處理目標裝置無法重現之色彩的政策:截切到最接近的可及色彩,或是位移一段範圍以維持色彩之間的關係。
  • 輸出意圖——文件對它所準備面對之輸出條件的宣告,通常透過一個內嵌的目標 ICC 設定檔(ISO 32000-2 §14.11.5);為 PDF/X 所要求,並為 PDF/A 所使用。
  • PDF/X——PDF 的 ISO 15930 印刷交換設定檔系列;一份 PDF/X 檔案必須攜帶一個指明其目標印刷條件的輸出意圖。