Php Imagick将CMYK JPG转换为PNG和透明

Php Imagick将CMYK JPG转换为PNG和透明,php,png,jpeg,imagick,cmyk,Php,Png,Jpeg,Imagick,Cmyk,我有一个CMYK JPG文件,我需要从中剪切一些部分,然后保存到CMYK PNG文件中。问题是,即使我只是打开JPG文件并将其保存到PNG文件中,颜色也会发生巨大的变化。我已经尝试了一天来解决这个问题,并且用尽了SO和Google上的所有可用资源 这是我的密码: $imageStick = new Imagick("original.jpg"); // CMYK JPG $largeStick = new Imagick(); // create a bigger PNG file with

我有一个CMYK JPG文件,我需要从中剪切一些部分,然后保存到CMYK PNG文件中。问题是,即使我只是打开JPG文件并将其保存到PNG文件中,颜色也会发生巨大的变化。我已经尝试了一天来解决这个问题,并且用尽了SO和Google上的所有可用资源

这是我的密码:

$imageStick = new Imagick("original.jpg"); // CMYK JPG

$largeStick = new Imagick(); // create a bigger PNG file with transparent background
$largeStick->newImage($smallStick->getimagewidth(), $smallStick->getimageheight() * 3, new ImagickPixel('transparent'), 'png');

$largeStick->compositeimage($smallStick, Imagick::COMPOSITE_DEFAULT, 0, 0);

$largeStick->writeimage("resampled.png");
以下是图片:

-原件-

-重新取样

你知道为什么会这样吗

我已尝试从原始jpg文件复制所有可能的配置文件和图像属性:

foreach ($smallStick->getimageprofiles() as $name => $profile)
    !empty($profile) && $largeStick->setimageprofile($name, $profile);

foreach ($smallStick->getimageproperties() as $name => $property)
    !empty($profile) && $largeStick->setimageproperty($name, $property);

$largeStick->setcolorspace($smallStick->getcolorspace());
手动设置ICC配置文件,但一点运气都没有:

$icc_cmyk = file_get_contents('USWebUncoated.icc');
$largeStick->profileImage('icc', $icc_cmyk);
如果您对此有任何想法,我们将不胜感激


谢谢

好了,PNG格式不支持CMYK颜色空间,所以我相信你问的是不可能的。。。请看第二段好的,我可能错了,但这里重要的是,当我将图像从jpg传输到png时,颜色会发生显著变化。JPEG中的CMYK没有公认的标准。Adobe有自己的格式,但没有通用的支持。CMYK到RGB的转换也有点定义不清。图像最初是如何创建的?@user3344003使用ICC配置文件进行CMYK到RGB的转换,我认为定义得很好。大多数CMYK JPEG都包含ICC配置文件。问题在于色域。