USL Color Correction PHP: автоматизация цветокоррекции в полиграфии

Разбираем работу скрипта usl_colorcorrection.php для автоматической цветокоррекции в полиграфии: ICC-профили, конвертация CMYK, рендеринговые намерения и интеграция.

Когда файл CMYK, свёрстанный в Photoshop, выглядит сочным на мониторе, но после цифровой печати даёт грязные тени и тусклые акценты, причина почти всегда одна — отсутствие или неверное применение ICC-профиля. В типографиях, где каждый день обрабатываются сотни макетов от разных дизайнеров, ручная проверка цветов становится узким местом. Скрипт usl_colorcorrection.php — это инструмент на PHP, который автоматически применяет цветовые преобразования на основе встроенных или внешних профилей, подгоняя изображение под конкретную печатную машину и бумагу.

Интерфейс командной строки для запуска скрипта цветокоррекции с параметрами профиля

Зачем нужна программная цветокоррекция в полиграфии

Любой растровый файл (TIFF, JPEG, PNG) несёт в себе цветовое пространство — sRGB, Adobe RGB, CMYK с тем или иным профилем. Печатное устройство (офсетная машина, цифровой принтер) имеет свой собственный цветовой охват. Без конвертации через ICC-профили происходит аппаратное преобразование «по умолчанию», которое часто искажает оттенки, особенно в тенях и телесных тонах. usl_colorcorrection.php решает эту задачу программно: он загружает изображение, читает его исходный профиль (или предполагает sRGB, если профиль не встроен), затем преобразует цвета в целевой профиль с заданным рендеринговым намерением (перцепционное, относительное колориметрическое, насыщенность, абсолютное колориметрическое).

Типичные сценарии использования

  • Пакетная подготовка макетов к печати — скрипт обрабатывает папку с изображениями, заменяя цветовое пространство на CMYK нужного стандарта (например, FOGRA39 или GRACoL).
  • Интеграция с веб-порталом для заказов — когда клиент загружает логотип в RGB, скрипт на лету конвертирует его в CMYK с профилем, соответствующим выбранному типу продукции.
  • Контроль качества при приёме файлов от дизайнеров — автоматическая проверка: если изображение не содержит встроенного профиля, скрипт выдаёт предупреждение и применяет профиль по умолчанию.

Техническая реализация usl_colorcorrection.php

Скрипт написан на PHP и использует библиотеку Imagick (обёртка над ImageMagick) или GD с расширением для работы с ICC. Основные функции:

  • loadImage($path) — чтение файла, определение формата и встроенного профиля.
  • setSourceProfile($profilePath) — если профиль не встроен, задать исходный вручную (например, sRGB).
  • setTargetProfile($profilePath, $intent) — указать целевой профиль и рендеринговое намерение.
  • convert() — выполнить преобразование с учётом чёрной точки, гаммы и компенсации точки белого.
  • saveImage($outputPath, $quality) — сохранить результат с возможностью встроить целевой профиль в файл.

Пример вызова из командной строки:

php usl_colorcorrection.php --input=photo.tif --source=sRGB.icc --target=FOGRA39.icc --intent=perceptual --output=photo_cmyk.tif

Важно: без параметра --intent скрипт использует относительное колориметрическое намерение, которое сохраняет цвета внутри целевого охвата, но обрезает выходящие за границы. Для фотографий с яркими насыщенными тонами лучше выбирать перцепционное — оно сжимает весь диапазон, сохраняя визуальное соотношение цветов.

Сравнение цветовых охватов sRGB и печатного профиля CMYK на диаграмме CIE Lab

Практические нюансы для заказчика и технолога

Даже идеально написанный скрипт не исправит кривой исходник. usl_colorcorrection.php не делает тоновую коррекцию (контраст, яркость) — он только преобразует цветовое пространство. Если исходное изображение передержано или имеет цветовой сдвиг, его нужно править до конвертации. Рекомендуется передавать в типографию файлы уже в CMYK с профилем, соответствующим печатному процессу. Однако на практике дизайнеры часто присылают RGB, и тогда скрипт становится спасательным кругом.

Ещё один момент — чёрный текст. При конвертации из RGB в CMYK чистый чёрный (R=0,G=0,B=0) превращается в составной чёрный (C=60,M=40,Y=40,K=100), что может дать «расползание» на мелких шрифтах. usl_colorcorrection.php имеет опцию --preserve-black, которая оставляет чёрные пиксели с одинаковыми значениями R=G=B ниже порога (например, 20) как 100% K, а остальные оттенки преобразует стандартно. Это критично при подготовке макетов для офсета, где совмещение красок должно быть точным.

Совместимость с разными форматами

Скрипт поддерживает TIFF (8 и 16 бит на канал), PSD (с сохранением слоёв, если профиль применяется к объединённому изображению), JPEG и PNG. Для работы с PSD требуется ImageMagick, собранный с поддержкой PSD. В случае многослойных файлов usl_colorcorrection.php по умолчанию обрабатывает только первый слой (фон). Если нужна конвертация всех слоёв, используется флаг --flatten-layers, который сначала выполняет сведение, а затем применяет профиль. Это удобно при подготовке макетов для дизайна каталогов продукции, где часто используются сложные многослойные PSD.

Типичные ошибки и их решение

Ошибка Причина Решение
Результат темнее оригинала Неправильно выбран рендеринговый интент (абсолютное колориметрическое без компенсации точки белого) Использовать относительное колориметрическое с опцией --black-point-compensation
Цвета стали плоскими, пропала насыщенность Перцепционное намерение сжало слишком широкий исходный охват в узкий целевой Попробовать относительное колориметрическое; если исходный охват действительно шире, неизбежна потеря — нужно править исходник
Ошибка «No ICC profile found» Входной файл не имеет встроенного профиля, и не указан --source Явно задать исходный профиль (обычно sRGB для веб-графики)
Артефакты на градиентах 8-битный исходник с постеризацией после конвертации Использовать 16-битные TIFF на входе или включить dithering (опция --dither)

Интеграция в производственный процесс

В типографиях, где принимают заказы через сайт, usl_colorcorrection.php можно встроить в конвейер обработки. Например, после загрузки файла клиентом скрипт проверяет: если цветовое пространство не совпадает с выбранным типом продукции (визитки, листовки, пакеты), автоматически запускается конвертация. Для цветных конвертов с плотным фоном особенно важно, чтобы профиль соответствовал конкретной марке бумаги — скрипт позволяет подгружать разные профили в зависимости от артикула материала.

Ещё одно применение — контрольный просмотр (soft proofing). Перед финальной конвертацией скрипт может сгенерировать preview-файл с наложением профиля, чтобы оператор визуально оценил результат. Для этого используется параметр --proof-only, который создаёт sRGB-копию с симуляцией печатного охвата (без сохранения CMYK).

Для производственного цикла, где ежедневно обрабатываются сотни изображений, usl_colorcorrection.php удобно запускать как cron-задачу. Скрипт логирует все операции: имя файла, исходный и целевой профиль, рендеринговое намерение, время конвертации. Это позволяет отследить, сколько макетов пришло без профиля, и при необходимости скорректировать инструкции для дизайнеров.