Когда в типографию приходит заказ на каталог из двухсот товаров, каждый предмет нужно сфотографировать, обрезать, перевести в CMYK, выставить резкость и вписать в единый шаблон. Ручная обработка такого объёма занимает дни — и неизбежно плывут поля, съезжают цветовые профили. PHP с расширениями GD и Imagick позволяет написать скрипт, который выполнит все эти операции за несколько минут, причём с учётом разных условий: для глянцевой бумаги — один профиль, для матовой — другой, для круглых наклеек — обтравка по контуру, для еврофлаеров — обрезка под формат A6.
Зачем вообще PHP в подготовке фото к печати
Большинство дизайнеров сидят в Photoshop или Capture One, но пакетная обработка в этих программах требует однотипных действий. Если у вас сто снимков с разным фоном, разной ориентацией и разным разрешением, вручную настраивать экшены для каждого — тот же ручной труд. PHP-скрипт, запущенный из командной строки или через веб-интерфейс, может сам проверить размеры, ориентацию, наличие цветового профиля и принять решение: повернуть, обрезать, конвертировать, наложить метки. Это и есть «условное фото» (conditional photo) — когда программа анализирует исходник и выбирает алгоритм обработки в зависимости от его свойств.
Что нужно для работы: библиотеки и окружение
На сервере или локальной машине должны быть установлены:
- PHP 7.4+ (рекомендуется 8.x для производительности);
- GD — встроенная библиотека для базовых операций (изменение размера, обрезка, наложение текста);
- Imagick — обёртка над ImageMagick, даёт полноценную работу с цветовыми профилями, ICC, CMYK, высоким битрейтом;
- Exif — для чтения метаданных (ориентация камеры, дата, фокусное расстояние).
Установка через composer обычно не требуется, достаточно подключить соответствующие модули в php.ini. В среде Linux это делается командами apt install php-gd php-imagick.
Типовые задачи, которые решает скрипт
Рассмотрим несколько сценариев, актуальных именно для полиграфии.
1. Автоматический поворот по EXIF
Современные камеры и смартфоны записывают ориентацию в метаданные, но не поворачивают сам пиксельный массив. При открытии в браузере фото выглядит нормально, а при печати — перевёрнутым. Скрипт читает тег Orientation и доворачивает изображение средствами Imagick:
$image = new Imagick($source);
$orientation = $image->getImageOrientation();
switch($orientation) {
case Imagick::ORIENTATION_ROTATE_90:
$image->rotateImage('#000', 90);
break;
// ... остальные случаи
}
$image->setImageOrientation(Imagick::ORIENTATION_TOPLEFT);
$image->writeImage($output);
2. Конвертация в CMYK с правильным профилем
Для офсетной печати фото должно быть в CMYK. Но не все исходники содержат встроенный профиль. PHP может проверить наличие ICC и, если профиля нет, назначить sRGB, а затем конвертировать в выбранный профиль (например, ISO Coated v2). При этом нужно учесть, что для разных видов бумаги используются разные профили. Скрипт может брать название заказа из имени папки и подставлять соответствующий профиль.
3. Обрезка под формат с учётом полей вылета
Для листовок евроформата (210×99 мм) или круглых наклеек часто требуется задать размер с выпусками. Скрипт вычисляет соотношение сторон, центрирует изображение и добавляет поля заданного цвета (обычно белого). Если исходник уже близок к нужному кадрированию, программа может не обрезать, а только добавить выпуски — это и есть условное ветвление.
Пример: подготовка фото для каталога сувенирной продукции
Представьте, что вы получили 150 снимков кружек, ручек и блокнотов. Каждый снят на белом фоне, но размеры разные. Требуется:
- Удалить фон (или заменить на чисто белый, если фон серый);
- Привести все изображения к ширине 800 px (высота пропорционально);
- Добавить тень (drop shadow) для объёма;
- Сохранить в CMYK с профилем FOGRA39.
PHP-скрипт с Imagick может выполнить всё это за один проход. Ключевой момент — проверка, является ли фон уже белым (по гистограмме угловых пикселей). Если да — пропускаем удаление фона, чтобы не внести артефакты. Это и есть «условное фото».

Важные ограничения и подводные камни
PHP не умеет «понимать» изображение — он работает с пикселями. Любая автоматическая обтравка сложных объектов (волосы, прозрачные предметы) даёт посредственный результат. Для такой задачи лучше использовать специализированные инструменты (например, remove.bg API), а PHP-скрипт только интегрирует их. Кроме того, не стоит забывать про кэш: если скрипт запускается многократно, нужно проверять, не обработано ли уже фото, иначе вы рискуете перезаписать готовый файл.
Ещё один момент — управление памятью. Imagick по умолчанию загружает всё изображение в RAM. Для фото с разрешением 600 DPI и размером 40×60 см это может превысить лимит. Стоит установить $image->setResourceLimit(Imagick::RESOURCETYPE_MEMORY, 256) и использовать временные файлы на диске.
Интеграция с рабочим процессом типографии
Готовый PHP-скрипт можно повесить на веб-форму, куда дизайнер загружает архив с фото, а на выходе получает готовые файлы для вёрстки. Либо использовать его как часть конвейера при подготовке макетов наклеек — например, перед тем как отправить файл на резку, скрипт проверяет соответствие DPI и цветовой модели. Подробнее о том, как учесть технологию печати при подготовке макетов, мы разбирали в статье «Дизайн наклеек: как учесть технологию печати и не получить брак».
Практический совет напоследок
Прежде чем запускать скрипт на всём тираже, возьмите пять-семь репрезентативных снимков — с разным освещением, разной ориентацией и разным фоном. Прогоните их через PHP и проверьте каждый результат в Adobe Acrobat или на пробной печати. Только после этого обрабатывайте весь массив. Это сэкономит вам часы, а не сломает тираж.
