2015-03-31 150 views
1

我正在用IMagick在PHP中将图像从RGB转换为CMYK。IMagick RGB到CMYK腐败转换

在转换过程中,一些图像会在它们上面出现黑色网格。

代码:

$IMagick = new IMagick(); 
$IMagick->clear(); 
$IMagick->readImage(SITE_ROOT . 'userfiles/image/products/' . $image); 
$IMagick->negateImage(false, Imagick::CHANNEL_ALL); 
$IMagick->setImageColorspace(13); 
$icc_cmyk = file_get_contents(dirname(__FILE__).'/USWebCoatedSWOP.icc'); 
$IMagick->profileImage('icc', $icc_cmyk); 
unset($icc_cmyk); 
$IMagick->setImageColorspace(12); 
$IMagick->writeImage (SITE_ROOT . 'userfiles/image/products/cmyk/' . $image); 

图片:

Original

Converted

我将围绕80张图片在一个循环中,其中大部分都OK。 任何想法为什么会发生?

编辑: 工作代码:创建新的图像时

$IMagick = new IMagick(); 
$IMagick->clear(); 
$IMagick->readImage(SITE_ROOT . 'userfiles/image/products/' . $image); 
$icc_cmyk = file_get_contents(dirname(__FILE__).'/USWebCoatedSWOP.icc'); 
$IMagick->profileImage('icc', $icc_cmyk); 
unset($icc_cmyk); 
$IMagick->transformImageColorspace(12); 
$IMagick->writeImage (SITE_ROOT . 'userfiles/image/products/cmyk/' . $image); 
+0

setImageColorspace“设置图像颜色空间,创建新图像时应使用此方法。要更改现有图像的颜色空间,应使用Imagick :: transformImageColorspace()。” – Danack 2015-03-31 14:55:26

+0

工作。还解决了反转颜色的问题。所以不需要否定图像。 你可以将它作为anwser发布,以便我可以接受它。 – 2015-03-31 15:10:57

回答

0

setImageColorspace应该只被使用,无论是通过Imagick :: newPseudoImage或渲染ImagickDraw实例为图像。

对于现有图像,更改图像颜色空间的正确方法是Imagick :: transformImageColorspace。