Php 将CMYK PDF转换为RGB JPG将显示全黑

Php 将CMYK PDF转换为RGB JPG将显示全黑,php,imagemagick,rgb,cmyk,Php,Imagemagick,Rgb,Cmyk,我有一个几年前安装的钻头,一直工作良好: $imagick=new imagick(); //设置图像分辨率 $imagick->setResolution(300300); //从PDF读取图像 $imagick->readImage($pdf_此处); //在转换为RGB之前应用CMYK配置文件 $icc_cmyk=file_get_contents('../../profiles/CoatedGRACoL2006.icc'); $imagick->profileImage('icc',$i

我有一个几年前安装的钻头,一直工作良好:

$imagick=new imagick();
//设置图像分辨率
$imagick->setResolution(300300);
//从PDF读取图像
$imagick->readImage($pdf_此处);
//在转换为RGB之前应用CMYK配置文件
$icc_cmyk=file_get_contents('../../profiles/CoatedGRACoL2006.icc');
$imagick->profileImage('icc',$icc_cmyk);
//使用Adobe icc配置文件转换为RGB
$icc_rgb=file_get_contents('../../profiles/AdobeRGB1998.icc');
$imagick->profileImage('icc',$icc_rgb);
$imagick->setImageColorspace(imagick::COLORSPACE\u SRGB);
//裁剪至修剪尺寸
$imagick->cropImage(1050600,37.5,37.5);
//写一个图像
$imagick->writeImage(此处为jpg_);
但现在它决定不再工作了。 我正在生成一个CMYK PDF,它使用PMS颜色,如下所示:

它一直转换得很好,但现在它决定转换成:


我尝试过上传不同的较新的RGB和CMYK配置文件,但运气不好,要么它没有任何不同,要么它反转了颜色。我完全不知道会发生什么变化。我根本没有修改这个文件。我一直在更新网站的其他方面,这些方面大约在10年前被编码为MySQL查询,需要用准备好的语句更新到mySQLi。

正如@fmw42评论的那样,setImageColorspace工作不正常。 我最终完全删除了配置文件,只使用了setColorspace。像这样:

//创建Imagick对象
$imagick=新的imagick();
//设置图像分辨率
$imagick->setResolution(300300);
//设置颜色空间
$imagick->setColorspace(imagick::COLORSPACE\u SRGB);
//从PDF读取图像
$imagick->readImage($pdf_此处);
//裁剪至修剪尺寸
$imagick->cropImage(1050600,37.5,37.5);
//写一个图像
$imagick->writeImage(此处为jpg_);

如@fmw42所述,setImageColorspace工作不正常。 我最终完全删除了配置文件,只使用了setColorspace。像这样:

//创建Imagick对象
$imagick=新的imagick();
//设置图像分辨率
$imagick->setResolution(300300);
//设置颜色空间
$imagick->setColorspace(imagick::COLORSPACE\u SRGB);
//从PDF读取图像
$imagick->readImage($pdf_此处);
//裁剪至修剪尺寸
$imagick->cropImage(1050600,37.5,37.5);
//写一个图像
$imagick->writeImage(此处为jpg_);

Use-colorspace sRGB等效值,然后再读取输入。我在设置$icc_cmyk变量之前尝试了它,但它在处理过程中被锁定。Ghostscript无法正确读取cmyk图像。在读取图像之前使用配置文件是不正确的。它必须有一些工作,而你没有阅读输入。但是您可以在读取输入之前使用-colorspace sRGB。这会告诉ImageMagick和Ghostscript在读取输入时将图像转换为sRGB。你看,我做到了。我必须将其从setImageColorSpace更改为setColorSpace。在读取输入之前,请使用-colorspace sRGB等效值。我在设置$icc_cmyk变量之前尝试了此操作,但它在处理过程中被锁定。Ghostscript无法正确读取cmyk图像。在读取图像之前使用配置文件是不正确的。它必须有一些工作,而你没有阅读输入。但是您可以在读取输入之前使用-colorspace sRGB。这会告诉ImageMagick和Ghostscript在读取输入时将图像转换为sRGB。你看,我做到了。我必须将它从setImageColorSpace更改为setColorSpace。