PHP IMagick RGB转CMYK颜色反转?

3

我正在尝试使用IMagick PHP模块将RGB .gif转换为CMYK .gif。

我编写了以下代码:

$i = new Imagick('mosaique.gif');
$i->setImageColorspace(Imagick::COLORSPACE_CMYK);
$i->setImageFormat('gif');
$i->writeImage('mosaique-cmyk.gif');

但是生成的 "mosaique-cmyk.gif" 仍然是 RGB 格式... 只不过颜色被反转了 (O_O)

我做错了什么?

编辑:

我尝试使用 .jpg 格式,图像被转换为 CMYK,但仍然是负片。

编辑 2:

我尝试在另一台服务器上运行我的脚本创建一个 .pdf 文件,结果正常。

IMagick 存在已知的 bug 吗? php5 库有需要设置的选项吗?

生成负片的版本比正常工作的版本更新

错误的结果 PHP 5.3.3 IMagick 3.0.0RC1 ImageMagick 6.6.2

正确的结果 PHP 5.2.10 IMagick 2.1.1 ImageMagick 6.5.1

4个回答

3

实际上这是一个错误,也就是一个bug ;)

我已经报告了这个问题,其他人已经确认我的担忧,现在已经指派给开发者修复: http://pecl.php.net/bugs/bug.php?id=22184

目前的解决办法是使用不同版本的库。


我有一个解决方案。请看我的答案。 - Kevin Florida

2

GIF是一种256色格式,也称为“索引”。我认为无法将gif保存为cmyk格式。这256种颜色中的每一种都是RGB值,但它不能存储完整的RGB色域。


我已经尝试过使用Illustrator将您的.gif转换为CMYK,但是当它将图像保存为.gif时,它又回到了RGB,所以您可能是正确的!我之前也尝试过在JPG上进行示例,它被转换为CMYK,但仍然是负片 :| - Riccardo
CMYK jpg也不是普遍支持的格式。虽然Photoshop可以处理,但并非所有软件都能够处理它。此外,从技术上讲,GIF并不是RGB格式,而是索引颜色格式。你混淆了这些术语。每当你在RGB和CMYK之间来回转换时,都会失去一定的色彩保真度。 - horatio

1

试试这个:

$im->stripImage();
$icc_cmyk_profile_path='image_functions/cmyk_icc_profiles/USWebUncoated.icc'; 
//[http://www.mattbeals.com/icc/][1]

$icc_cmyk = file_get_contents($icc_cmyk_profile_path);
$im->profileImage('icc', $icc_cmyk);
unset($icc_cmyk);
$colorspace=$im->getImageColorspace();                  

if ($colorspace==12) {
    echo "CMYK";
}

$im->stripImage();

$im->writeImage($destination);      
$im->clear();
$im->destroy();

-2

这个问题是关于php imagick扩展的,而不是关于ImageMagick命令行“convert”的,所以这个答案“不相关”。=> -1 - griffin
php imagick并不是真正的图像处理工具,它只是ImageMagick的一个包装器。如果你知道命令行选项,你可以在php代码中使用它。 - Gajendra Bang
这是ImageMagick库的包装器,而不是convert工具的包装器。那不一样。并且这个包装器没有暴露所有选项。您可以查看https://github.com/mkoppanen/imagick/的源代码,看到它实际上并不仅仅调用cli IM命令(请参见imagick.c),而是单独公开功能。 - griffin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接