Когда файл 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 скрипт использует относительное колориметрическое намерение, которое сохраняет цвета внутри целевого охвата, но обрезает выходящие за границы. Для фотографий с яркими насыщенными тонами лучше выбирать перцепционное — оно сжимает весь диапазон, сохраняя визуальное соотношение цветов.

Практические нюансы для заказчика и технолога
Даже идеально написанный скрипт не исправит кривой исходник. 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-задачу. Скрипт логирует все операции: имя файла, исходный и целевой профиль, рендеринговое намерение, время конвертации. Это позволяет отследить, сколько макетов пришло без профиля, и при необходимости скорректировать инструкции для дизайнеров.
