【发布时间】:2016-05-03 18:30:21
【问题描述】:
我被困住了,真的可以在这方面使用一些帮助。我正在使用 PHP 和 Imagick 生成一个效果很好的缩略图。但是,我注意到 CMYK PDF 始终以灰度生成。因此,我通过获取 CMYK PDF 并使用 Adobe Acrobat Pro 手动将其转换为 RGB 来对此进行测试。然后我通过下面的代码重新运行它,它产生了一个彩色图像。我知道
$image->transformImageColorSpace(1);
or
$image->setImageColorSpace(1);
但是这不起作用。 将 pdf 转换为彩色 PNG 图像的正确方法是什么? 我查看了以下链接,但没有运气:
http://php.net/manual/en/imagick.setimagecolorspace.php
Convert PDF to JPEG with PHP and 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 并通过 adobe acrobat 将其转换为 RGB,它会出现颜色。我对此进行了测试,它仍然适用。
【问题讨论】:
-
i) 如果您的 ImageMagick 或 GhostScript 版本超过 2 年,这可能是一个错误。 ii) 你能发布一个示例图片吗?
-
2016 年 3 月 2 日 - 这仍然是一个从未解决的问题。我可能使用的任何其他图像转换都会有所帮助
-
请在某处发布示例 PDF - 如有必要,请在 Imagick 问题页面上github.com/mkoppanen/imagick
-
这是我一直在测试的 PDF 的链接:dropbox.com/s/pzv5cowulz827hd/tree-blackandwhite.pdf?dl=0 老实说,您并不真的需要我的测试 PDF。只需获取任何 pdf 并将颜色空间更改为 CMYK,它就会使用上述代码重现错误。我在这里所做的只是从网上下载一张图片。将其转换为 pdf,将颜色空间更改为 CMYK。如果我将其更改为 RGB,它将显示为颜色。
标签: php ghostscript imagick cmyk