Конвертировать PDF (с прозрачностью * и * CMYK) в JPG

Мне нужно сгенерировать JPG изображения из файлов PDF (только на первой странице). Файлы PDF создаются пользователем, поэтому они могут содержать все, что угодно. В настоящее время я использую следующий код:

// Load PDF.
$i = new Imagick;

// Create thumbnail of first page of PDF.
$i->setResolution(150, 150);
$i->loadImage("test.pdf[0]");
$i->thumbnailImage(640, 480, true);

// Remove transparency, fill transparent areas with white rather than black.
$i->setImageBackgroundColor("white");
$i->setImageAlphaChannel(11); // Imagick::ALPHACHANNEL_REMOVE
$i->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);

// Output.
$i->writeImage("test.jpg");

Это работает, как и ожидалось, прозрачность становится белым, а не черным Однако у меня возникли проблемы с некоторыми сгенерированными изображениями jpg, поэтому я запустилjpeginfo на них:

$ jpeginfo -c test.jpg

test.jpg 960 x 480 32-битный JFIF N 9481 Неподдерживаемый запрос преобразования цветов [ОШИБКА]

Оказывается, что некоторые исходные PDF-файлы действительно используют CMYK и, по-видимому, не преобразуются в RGB при сохранении в формате jpg. Поэтому я изменил свой код на следующий (добавление одной строки) для явного преобразования в RGB:

// Load PDF.
$i = new Imagick;

// Create thumbnail of first page of PDF.
$i->setResolution(150, 150);
$i->loadImage("test.pdf[0]");
$i->thumbnailImage(640, 480, true);

// Remove transparency, fill transparent areas with white rather than black.
$i->setImageBackgroundColor("white");
$i->setImageAlphaChannel(11); // Imagick::ALPHACHANNEL_REMOVE
$i->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);

// Convert to RGB to prevent creating a jpg with CMYK colors.
$i->setImageColorspace(Imagick::COLORSPACE_RGB);

// Output.
$i->writeImage("test.jpg");

Это создает JPEG сRGB цветовой профиль, все в порядке. Однако по какой-то неясной причине это приводит к изображению счерный фон снова. Другими словами: проблема прозрачности вернулась. Почему Imagick делает это, и что более важно, каково решение проблемы прозрачности иCMYK проблема?

Ответы на вопрос(1)

Ваш ответ на вопрос