Php 使用Imagick将PDF转换为PNG

Php 使用Imagick将PDF转换为PNG,php,imagick,cmyk,Php,Imagick,Cmyk,我有一个网页,我有许多pdf文档,是CMYK中的1页图像。我需要将它们转换为png/jpg以显示在网页上。我试图使用PHP原生的Imagick,但偶然发现了一个奇怪的问题。执行转换的代码如下所示: $im = new Imagick(); $im->setResolution(200, 200); $im->readimage($file->getAbsolutePath()); $im->setImageFormat('png'); $im->transformI

我有一个网页,我有许多pdf文档,是CMYK中的1页图像。我需要将它们转换为png/jpg以显示在网页上。我试图使用PHP原生的Imagick,但偶然发现了一个奇怪的问题。执行转换的代码如下所示:

$im = new Imagick();
$im->setResolution(200, 200);
$im->readimage($file->getAbsolutePath());
$im->setImageFormat('png');
$im->transformImageColorspace(Imagick::COLORSPACE_SRGB);
$im->writeImage($file->getAbsolutePath() . '.png');
现在在我的本地安装中,一切正常,PNG文件看起来像PDF文档。但在我的服务器上,我注意到有时颜色完全不准确

以下是一个例子:

我注意到的唯一区别是phpinfo报告的Imagick版本:

本地:PHP 5.5.9 Imagick:6.7.7-10 2014-03-06 Q16

服务器:PHP 5.4.42 Imagick:6.8.9-7 Q16 x86_64 2015-03-21

有人知道如何让服务器使用正确的颜色空间将pdf转换成png吗

[编辑/更新]

根据@fab sa的建议,我尝试使用icc配置文件,现在代码如下所示:

$icc_cmyk = file_get_contents(dirname(__FILE__).'/USWebUncoated.icc');
$icc_rgb = file_get_contents(dirname(__FILE__).'/sRGB_v4_ICC_preference.icc');
$im->setResolution(200,200);
$im->readimage($file->getAbsolutePath());
$im->setImageFormat('png');
$im->profileImage('icc', $icc_cmyk);
$im->profileImage('icc', $icc_rgb);
$im->transformImageColorspace(Imagick::COLORSPACE_SRGB);
$im->writeImage($file->getAbsolutePath().'.png');
和国际商会简介:


但是仍然没有预期结果。

服务器上使用的Ghostscript版本似乎没有正确处理pdf。我在gs版本8.7中得到了相同的错误结果,在9.16中得到了正确的结果

ghostscript版本8.7 gs-q-dQUIET-dSAFER-dBATCH-dNOPAUSE-dNOPROMPT-dMaxBitmap=500000000-dAlignToPixels=0-dGridFitTT=1-sDEVICE=pngalpha-dTextAlphaBits=4-dGraphicsAlphaBits=4-r50-sOutputFile=docgs8-%d.png doc.pdf

ghostscript版本9.16从下载 ./gs-916-linux_x86_64-q

-dQUIET-dSAFER-dBATCH-dNOPAUSE-dNOPROMPT-dMaxBitmap=500000000-dAlignToPixels=0-dGridFitTT=1-sDEVICE=pngalpha-dTextAlphaBits=4-dGraphicsAlphaBits=4-r50-sOutputFile=docgs9-%d.png doc.pdf


您在本地和服务器中使用哪些版本的PHP?似乎也有同样的问题:我在原始帖子中添加了php版本信息,我尝试使用icc配置文件,但没有成功(见更新)您好。我在本地和服务器上使用完全不同的软件版本,但它们的结果并不相同。这可能是什么原因?!!一个!这应该是一个有用的评论吗?我理解不同的版本可能会产生不同的结果。在这种情况下,转换是不正确的(不应该是这种情况,因为文档中没有关于版本之间颜色空间更改的任何信息),因此我的问题是,是否有人知道或知道如何使我的服务器版本正常工作。