Миниатюра PDF всегда создается в оттенках серого с помощью Imagick

Я застрял и мог бы действительно помочь с этим. Я использую PHP и Imagick для создания миниатюры, которая отлично работает. Однако я заметил, что файлы CMYK PDF создаются всегда в оттенках серого. Поэтому я проверил это, взяв файл CMYK PDF и вручную преобразовав его в RGB с помощью Adobe Acrobat Pro. Затем я перезапустил его через следующий код, и он создал цветное изображение. Я знаю о

$image->transformImageColorSpace(1);
or
$image->setImageColorSpace(1);

Однако это не работает. Как правильно преобразовать PDF в цветное изображение PNG? Я посмотрел на следующие ссылки без удачи:

http://php.net/manual/en/imagick.setimagecolorspace.php

Конвертируйте PDF в JPEG с помощью PHP и ImageMagick

Любая помощь по этому вопросу будет отличной.

Вот код:

$filePath = fileSaveUserUpload("path/to/file", ""); //path changed here...
$_SESSION['FILEPATH'] = $filePath;

//-------------first makes a thumbnail of first page in image/pdf
$extension_pos = strrpos($filePath, '.');                        // find position (number) of the last dot, so where the extension starts

$image = new Imagick();
$image->readImage($filePath."[0]");                              //reads an image at a path(first page only in this case)
$image->transformImageColorSpace(1);                             //convert to RGB
$image->setbackgroundcolor('white');                             //replace transparency with this color
$image->setCompression(Imagick::COMPRESSION_LOSSLESSJPEG);
$image->setCompressionQuality(150);
$image->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE);      //remove transparency
$image->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);          //make everything that was transparent white
$image->thumbnailImage(0,250);                                   //max height 300 but try and preserve aspect ratio (wdithxheight)
$thumbnail = substr($filePath, 0, $extension_pos) . '_thumb.png';// . substr($filePath, $extension_pos);

$image->writeImage($thumbnail);
$image->clear();
$image->destroy();

ОБНОВИТЬ:

Я использую следующую версию imagick:

ImageMagick 6.9.1-2 Q16 x86 2015-04-14

3.3.0RC2

Версия GhostScript:
9,18

Вот оригинальный PDF (сменил его на картинку здесь):

введите описание изображения здесь

Вот эскиз, который он произвел:

введите описание изображения здесь

Это ТОЛЬКО происходит с CMYK PDF. Если я возьму этот же PDF и преобразую его в RGB через Adobe Acrobat, он получится цветным. Я проверил это, и это все еще верно.

2

Решение

Вы можете попробовать изменить:

$image->transformImageColorSpace(1);
в
$image->transformImageColorSpace(Imagick::COLORSPACE_RGB);,

Я не уверен, что вы пытаетесь сделать с 1но согласно PHP.net, Есть предопределенные цветовые пространства, которые можно добавить к transformImageColorSpace(); иметь вывод изображения с правильным цветовым пространством.

0

Другие решения

Вероятно, проблема, которую вы видите, это старая версия GhostScript, которая не выполняет преобразование правильно. Ниже приведено изображение, полученное при вызове вашего кода в системе с установленной версией GhostScript 8.70:

сладкий твит

Кстати, вы почти наверняка хотите использовать цветовое пространство SRGB, а не просто старый RGB. SRGB является правильным для отображения изображений на экранах компьютеров.

$image->transformImageColorSpace(\Imagick::COLORSPACE_SRGB);

Вот командная строка для тестирования ghostscript, выполняющего преобразование:

./gs-916-linux_x86_64 \
-q -dQUIET -dSAFER -dBATCH \
-dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 \
-dAlignToPixels=0 -dGridFitTT=1 -sDEVICE=pngalpha \
-dFirstPage=1 -dLastPage=3 \
-dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r72 \
-sOutputFile=gs-%d.png tree-blackandwhite.pdf

Следует преобразовать изображение в PNG. Вам, вероятно, нужно заменить ./gs-916-linux_x86_64 просто gs,

0