Я застрял и мог бы действительно помочь с этим. Я использую 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, он получится цветным. Я проверил это, и это все еще верно.
Вы можете попробовать изменить:
$image->transformImageColorSpace(1);
в
$image->transformImageColorSpace(Imagick::COLORSPACE_RGB);
,
Я не уверен, что вы пытаетесь сделать с 1
но согласно PHP.net, Есть предопределенные цветовые пространства, которые можно добавить к transformImageColorSpace();
иметь вывод изображения с правильным цветовым пространством.
Вероятно, проблема, которую вы видите, это старая версия 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
,