PDF 缩略图总是使用 Imagick 生成为灰度

wes*_*ywh 5 php cmyk ghostscript imagick

我被卡住了,真的可以在这个问题上使用一些帮助。我正在使用 PHP 和 Imagick 生成一个运行良好的缩略图。但是,我注意到 CMYK PDF 总是以灰度生成。因此,我通过获取 CMYK PDF 并使用 Adob​​e Acrobat Pro 手动将其转换为 RGB 来对此进行测试。然后我通过以下代码重新运行它并生成了一个彩色图像。我知道

$image->transformImageColorSpace(1);
or
$image->setImageColorSpace(1);
Run Code Online (Sandbox Code Playgroud)

然而这行不通。将 pdf 转换为彩色 PNG 图像的正确方法是什么?我查看了以下链接但没有运气:

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

使用 PHP 和 ImageMagick 将 PDF 转换为 JPEG

对此的任何帮助都会很棒。

这是代码:

$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();
Run Code Online (Sandbox Code Playgroud)

更新:

我正在使用以下 imagick 版本:

ImageMagick 6.9.1-2 Q16 x86 2015-04-14

3.3.0RC2

GhostScript 版本: 9.18

这是原始PDF(在此处将其更改为图片):

在此处输入图片说明

这是它生成的缩略图:

在此处输入图片说明

这仅发生在 CMYK PDF 中。如果我使用相同的 PDF 并通过 adobe acrobat 将其转换为 RGB,它会显示颜色。我对此进行了测试,它仍然适用。

小智 0

您可以尝试改变:

$image->transformImageColorSpace(1);

$image->transformImageColorSpace(Imagick::COLORSPACE_RGB);

我不确定您想用 做什么1,但根据PHP.net,可以添加预定义的色彩空间transformImageColorSpace();以使图像输出具有正确的色彩空间。