Przejdź do głównej zawartości
getnextpdf.com

Kolor, profile i dlaczego twoja czerwień to nie moja czerwień

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

Kolor w pliku PDF nie jest utrwalonym wrażeniem. Jest instrukcją, a to, czy ta instrukcja da tę samą czerwień na twoim laptopie, na telefonie i na maszynie drukarskiej, zależy wyłącznie od tego, jak ten kolor został opisany. Ta strona dotyczy różnicy między kolorem, który jedynie mówi urządzeniu, co ma zrobić, a kolorem, który mówi, jak powinien faktycznie wyglądać.

Wybierz markową czerwień. Ustaw ją raz. Teraz spójrz na nią na tanim monitorze biurowym, potem na telefonie OLED w jasnym pomieszczeniu, a w końcu na odbitce z maszyny offsetowej. Trzy czerwienie. Czasem trzy ewidentnie różne czerwienie. Nikt nie zmienił liczby; liczba nigdy nie była całą prawdą.

W przypadku zwykłego dokumentu to drobiazg. W przypadku logo, regulowanej etykiety, zdjęcia w katalogu lub zapisu, który ma przetrwać dekady, kolor, który dryfuje, jest wadą. Koszt nie jest abstrakcyjny: to ponowny druk, odrzucona odbitka próbna albo archiwum, którego strony nie odpowiadają już oryginałom. Rozwiązaniem nie jest lepsza liczba. Jest nim powiedzenie prawdy o tym, co ta liczba oznacza.

  • Kolor urządzenia nazywa kolor przez wartości sterujące, które otrzymuje urządzenie, więc wynikiem jest to, co dane urządzenie z nich zrobi (Spec: ISO 32000-2, §8.6.4). DeviceRGB, DeviceCMYK i DeviceGray to przestrzenie barw urządzenia. Te same liczby, inny sprzęt, inny kolor.
  • Skalibrowany, oparty na ICC kolor wiąże te liczby ze zmierzonym, niezależnym od urządzenia odniesieniem za pośrednictwem osadzonego profilu (Spec: ISO 32000-2, §8.6.5.5). Teraz dokument niesie dość informacji, aby odtworzyć zamierzony kolor, a nie tylko przepis z wartości sterujących.
  • Profil ICC to właśnie to zmierzone odwzorowanie: jak liczby urządzenia — albo liczby standardowej przestrzeni barw lub warunku wyjściowego — odnoszą się do koloru, który postrzegałoby ludzkie oko, zakotwiczonego w niezależnej od urządzenia przestrzeni połączeniowej.
  • Cel renderowania to polityka określająca, co zrobić, gdy kolor jest poza zasięgiem urządzenia, ponieważ żadne urządzenie nie pokaże każdego koloru.
  • Cel wyjściowy to deklaracja dokumentu, z góry, dotycząca warunku wyjściowego, dla którego został przygotowany (Spec: ISO 32000-2, §14.11.5). Zależą od niego procesy produkcyjne klasy drukarskiej (PDF/X) i archiwizacyjnej (PDF/A).

Zacznij od uczciwej wersji problemu. DeviceRGB nie zawiera koloru. Zawiera trzy liczby z zakresu od 0 do 1 oraz niewypowiedziane założenie, że jakiś ekran zamieni je w światło. Dwa ekrany z różnym podświetleniem, różnymi panelami i różną kalibracją zamienią te same trzy liczby w widocznie różne światło. To nie jest błąd w PDF. To właśnie znaczy „kolor urządzenia”, a standard mówi o tym wprost: przestrzenie barw urządzenia są definiowane przez wartości, które otrzymuje urządzenie, a nie przez bezwzględny wygląd (Spec: ISO 32000-2, §8.6.4).

Skalibrowany kolor zamyka tę lukę, dodając odniesienie. Profil ICC jest wynikiem scharakteryzowania urządzenia lub przestrzeni barw — monitora, drukarki, maszyny drukarskiej albo standardowej przestrzeni takiej jak sRGB — i zapisania, jak surowe liczby odnoszą się do koloru w niezależnej od urządzenia przestrzeni połączeniowej, która przybliża ludzkie widzenie. Osadź ten profil, a liczby przestają być prywatnym dialektem; stają się stwierdzeniem zakotwiczonym w czymś, na co każdy może się zgodzić. Dokładnie to niesie oparta na ICC przestrzeń barw (Spec: ISO 32000-2, §8.6.5.5): kolor oraz zmierzone odwzorowanie, które mówi, co ten kolor oznacza.

Jest też druga, nieunikniona komplikacja. Zbiór kolorów, które potrafi wydrukować maszyna drukarska, nie jest zbiorem, które potrafi wyświetlić telefon, i żaden z nich nie jest pełnym zbiorem, który potrafi zobaczyć ludzkie oko. Gdy kolor wypada poza to, co potrafi odtworzyć urządzenie docelowe, trzeba dokonać wyboru: przyciąć go do najbliższego osiągalnego koloru albo przesunąć cały zakres kolorów razem, aby ich wzajemne relacje pozostały nienaruszone. Ten wybór to cel renderowania — celowa polityka, dobrana do zadania, a nie przypadek zaokrąglenia. Zdjęcie i logo firmowe często potrzebują różnych celów, ponieważ jednemu zależy na płynnych gradientach, a drugiemu na trafieniu w dokładny wzorzec barwy.

Wreszcie dokument, który zmierza w konkretne miejsce, może to oznajmić. Cel wyjściowy to plik deklarujący warunek wyjściowy, dla którego został przygotowany — zwykle osadzony docelowy profil ICC nazywający warunek druku lub urządzenie (Spec: ISO 32000-2, §14.11.5). To różnica między podaniem drukarni pliku a podaniem jej pliku, który mówi: „zostałem zbudowany dla tej maszyny”. Profile wymiany do druku czynią to obowiązkowym: plik PDF/X (rodzina ISO 15930) musi nieść cel wyjściowy (Spec: ISO 15930, PDF/X), a PDF/A opiera się na tym samym mechanizmie, dzięki czemu zależne od urządzenia kolory zarchiwizowanego pliku pozostają interpretowalne daleko w przyszłości, długo po tym, jak zniknie środowisko, w którym powstały.

  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).
Jak kolor podróżuje od twojego kodu do wiernego wyniku: jest nazywany w przestrzeni barw, opcjonalnie zakotwiczany w zmierzonym odniesieniu za pomocą profilu ICC, godzony z urządzeniem docelowym przez cel renderowania oraz interpretowany względem warunku wyjściowego, który deklaruje dokument.

Zadaniem NextPDF w tym łańcuchu jest poprawność względem standardów: zapisanie przestrzeni barw, osadzonych profili i celów wyjściowych w sposób, w jaki definiuje je format, tak aby narzędzie w dół przepływu — RIP drukarni, walidator archiwizacyjny, czytnik — odczytało dokładnie to, co zamierzono. Tworzy deklaracje; nie udaje, że jest urządzeniem.

Poniższy kształt szkicuje decyzję, a nie konkretne API. Chodzi o to, że miejsce docelowe jest deklarowane, a nie zgadywane.

<?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();
}

Kolory się nie zmieniły. Zmieniło się to, że plik mówi teraz, jak miały wyglądać, a to jest jedyne, na czym maszyna drukarska lub walidator może działać.

„To ta sama wartość heksadecymalna, więc to ten sam kolor”. Wartość heksadecymalna to zbiór wartości sterujących urządzenia. Bez profilu lub celu wyjściowego jest to przepis bez wskazanej kuchni — w każdej będzie smakować inaczej. Dwa pliki mogą nieść identyczne liczby RGB i być uczciwie różnymi kolorami, ponieważ jeden deklaruje kontekst, który nadaje liczbom znaczenie, a drugi pozostawia to przypadkowi.

Druga pułapka: założenie, że DeviceCMYK automatycznie oznacza „gotowy do druku”. Tak nie jest. CMYK to wciąż kolor urządzenia; jest ukształtowany pod maszynę drukarską, ale nie jest skalibrowany, dopóki profil lub cel wyjściowy nie nazwie faktycznego warunku druku.

NextPDF tworzy poprawny względem standardów kolor: zapisuje przestrzenie barw urządzenia i oparte na ICC oraz deklaruje cele wyjściowe dla procesów typu PDF/X i PDF/A, w sposób, w jaki definiuje je format. To wytwórcza połowa zadania i jest to ta połowa, którą dokument może wziąć na własność.

Czym NextPDF nie jest, to system korekty kolorów. Nie mierzy twojego monitora, nie symuluje na ekranie odbitki próbnej z maszyny ani nie certyfikuje, że wydrukowany wynik odpowiada zamierzonemu wzorcowi barwy w granicach tolerancji. To należy do zarządzanego kolorystycznie łańcucha próbnego oraz do ludzi, którzy nim kierują. Silnik sprawia, że plik mówi właściwą rzecz; o tym, czy ostateczne urządzenie to uszanuje, decyduje się w dół przepływu, przez urządzenie, biorące udział profile ICC oraz — w przypadku PDF/X i PDF/A — przez walidator, a nie przez producenta.

  • Przestrzeń barw urządzenia — kolor nazwany przez wartości sterujące, które otrzymuje urządzenie (DeviceRGB, DeviceCMYK, DeviceGray); wygląd zależy od interpretującego urządzenia (ISO 32000-2 §8.6.4).
  • Skalibrowany / oparty na ICC kolor — kolor zakotwiczony w niezależnym od urządzenia odniesieniu za pośrednictwem osadzonego profilu ICC, dzięki czemu zamierzony wygląd jest odtwarzalny na różnych urządzeniach (ISO 32000-2 §8.6.5.5).
  • Profil ICC — zmierzone odwzorowanie między liczbami konkretnego urządzenia a niezależnym od urządzenia odniesieniem, które przybliża ludzkie widzenie.
  • Cel renderowania — polityka postępowania z kolorami, których urządzenie docelowe nie potrafi odtworzyć: przycięcie do najbliższego osiągalnego koloru albo przesunięcie zakresu, aby zachować relacje barw.
  • Cel wyjściowy — deklaracja dokumentu dotycząca warunku wyjściowego, dla którego został przygotowany, zwykle za pomocą osadzonego docelowego profilu ICC (ISO 32000-2 §14.11.5); wymagana przez PDF/X i używana przez PDF/A.
  • PDF/X — rodzina profili wymiany do druku PDF wg ISO 15930; plik PDF/X musi nieść cel wyjściowy nazywający docelowy warunek druku.