【问题标题】:Convert CMYK PDF to RGB JPG goes all black将 CMYK PDF 转换为 RGB JPG 全黑
【发布时间】:2020-09-27 21:21:46
【问题描述】:

我有几年前设置的这个位并且一直工作正常:

$imagick = new Imagick();
// Sets the image resolution
$imagick->setResolution(300, 300);
// Reads image from PDF
$imagick->readImage($pdf_here);
// apply CMYK profile before converting to RGB
$icc_cmyk = file_get_contents('../../profiles/CoatedGRACoL2006.icc');
$imagick->profileImage('icc', $icc_cmyk);
// convert to RGB using Adobe icc profile
$icc_rgb = file_get_contents('../../profiles/AdobeRGB1998.icc');
$imagick->profileImage('icc', $icc_rgb);
$imagick->setImageColorspace(Imagick::COLORSPACE_SRGB);
// crop to trim size
$imagick->cropImage(1050, 600, 37.5, 37.5);
// Writes an image
$imagick->writeImage($jpg_here);

但现在它决定不再工作了。 我正在生成一个使用 PMS 颜色的 CMYK PDF,如下所示:

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

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

【问题讨论】:

  • 在读取输入之前使用等效的-colorspace sRGB。
  • 我在设置 $icc_cmyk 变量之前尝试过,它被锁定在处理中。
  • Ghostscript 无法正确读取 CMYK 图像。在读取图像之前使用配置文件是不正确的。它必须有一些工作要做,而您还没有阅读输入。但是您可以在读取输入之前使用 -colorspace sRGB。这告诉 ImageMagick 和 Ghostscript 在读取输入时将图像转换为 sRGB。见php.net/manual/en/imagick.setcolorspace.php
  • 做到了。我不得不将它从 setImageColorSpace 更改为 setColorSpace。

标签: php imagemagick rgb cmyk


【解决方案1】:

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

// create Imagick object
$imagick = new Imagick();
// Sets the image resolution
$imagick->setResolution(300, 300);
// set color space
$imagick->setColorspace(Imagick::COLORSPACE_SRGB);
// Reads image from PDF
$imagick->readImage($pdf_here);
// crop to trim size
$imagick->cropImage(1050, 600, 37.5, 37.5);
// Writes an image
$imagick->writeImage($jpg_here);

【讨论】: