Перейти к содержимому
getnextpdf.com

Цвет, профили и почему ваш красный — не мой красный

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

Цвет в PDF — это не фиксированное ощущение. Это инструкция, и от того, даст ли эта инструкция один и тот же красный на вашем ноутбуке, на телефоне и на печатной машине, полностью зависит, как был описан цвет. Эта страница — о разнице между цветом, который просто сообщает устройству, что делать, и цветом, который говорит, как он должен на самом деле выглядеть.

Выберите фирменный красный. Задайте его один раз. Теперь посмотрите на него на дешёвом офисном мониторе, затем на OLED-телефоне в ярко освещённой комнате, затем на оттиске с офсетной машины. Три красных. Иногда три явно разных красных. Никто не менял число; число никогда и не было всей историей.

Для случайного документа это пустяк. Для логотипа, регулируемой этикетки, фотографии в каталоге или записи, которой суждено просуществовать десятилетия, цвет, который смещается, — это дефект. Цена не абстрактна: это допечатка, отклонённая корректура или архив, страницы которого больше не совпадают с оригиналами. Решение — не более удачное число. Это правда о том, что число означает.

  • Цвет устройства именует цвет по управляющим значениям, которые получает устройство, поэтому результат — это всё, что из них сделает данное устройство (Spec: ISO 32000-2, §8.6.4). DeviceRGB, DeviceCMYK и DeviceGray — цветовые пространства устройства. Те же числа, другое оборудование, другой цвет.
  • Калиброванный цвет на основе 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).
How a color travels from your code to a faithful result: it is named in a colour space, optionally anchored to a measured reference by an ICC profile, reconciled to the target device through a rendering intent, and interpreted against the output condition the document declares.

Задача 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 — валидатором, а не производителем.

  • Цветовое пространство устройства — цвет, именованный по управляющим значениям, которые получает устройство (DeviceRGB, DeviceCMYK, DeviceGray); внешний вид зависит от интерпретирующего устройства (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 — семейство профилей обмена для печати ISO 15930 формата PDF; файл PDF/X обязан нести выходное намерение, именующее целевое условие печати.