将 CMYK 转换为 RGB 的最简单方法
<?php
if ($jpeg->getImageColorspace() == \Imagick::COLORSPACE_CMYK) {
$jpeg->transformimagecolorspace(\Imagick::COLORSPACE_SRGB);
}
?>
这在当前稳定的 Image Magick (6.9.0-4) 中非常有效。
(PECL imagick 2, PECL imagick 3)
Imagick::setImageColorspace — 设置图像颜色空间
设置图像颜色空间。此方法应在创建新图像时使用。要更改现有图像的颜色空间,您应该使用 Imagick::transformImageColorspace().
成功时返回 true
。
在出错时抛出 ImagickException。
将 CMYK 转换为 RGB 的最简单方法
<?php
if ($jpeg->getImageColorspace() == \Imagick::COLORSPACE_CMYK) {
$jpeg->transformimagecolorspace(\Imagick::COLORSPACE_SRGB);
}
?>
这在当前稳定的 Image Magick (6.9.0-4) 中非常有效。
使用此函数将 CMYK 转换为 RGB 时,图像可能会被反转。要解决此问题,请使用解决方法(不要忘记在线下载 .icc 文件)
<?php
// 不要使用此方法(它会反转图像)
// $img->setImageColorspace (imagick::COLORSPACE_RGB);
if ($img->getImageColorspace() == Imagick::COLORSPACE_CMYK) {
$profiles = $img->getImageProfiles('*', false);
// 我们只对 ICC 配置文件是否存在感兴趣
$has_icc_profile = (array_search('icc', $profiles) !== false);
// 如果它没有 CMYK ICC 配置文件,我们会添加一个
if ($has_icc_profile === false) {
$icc_cmyk = file_get_contents(dirname(__FILE__).'/USWebUncoated.icc');
$img->profileImage('icc', $icc_cmyk);
unset($icc_cmyk);
}
// 然后我们添加一个 RGB 配置文件
$icc_rgb = file_get_contents(dirname(__FILE__).'/sRGB_v4_ICC_preference.icc');
$img->profileImage('icc', $icc_rgb);
unset($icc_rgb);
}
$img->stripImage (); // 这会显着减小图像的大小(删除所有配置文件)
?>
仅供参考,以下是 (int $colorspace) 的细分
常量
0 - UndefinedColorspace
1 - RGBColorspace
2 - GRAYColorspace
3 - TransparentColorspace
4 - OHTAColorspace
5 - LABColorspace
6 - XYZColorspace
7 - YCbCrColorspace
8 - YCCColorspace
9 - YIQColorspace
10 - YPbPrColorspace
11 - YUVColorspace
12 - CMYKColorspace
13 - sRGBColorspace
14 - HSBColorspace
15 - HSLColorspace
16 - HWBColorspace
我有一个更好的解决方案,可以解决 php 5.3.x 上的反转颜色问题,而不是发布的解决方案。我发现的所有其他解决方案都会使图像变暗或弄乱颜色。
见下文(注意:我的 imagick 对象是 $jpeg)
$range = $jpeg->getQuantumRange();
$php_vs_arr = preg_split("/\./", phpversion());
$php_vs = $php_vs_arr[0] . '.' . $php_vs_arr[1];
if ($jpeg->getImageColorspace() == Imagick::COLORSPACE_CMYK) {
// 确保 cmyk 颜色空间设置正确
$jpeg->setImageColorspace(12);
// 然后我们添加一个 RGB 配置文件
$icc_rgb = file_get_contents(FRAMEWORK_PATH . DS . 'color' . DS . 'AdobeRGB1998.icc');
$jpeg->profileImage('icc', $icc_rgb);
unset($icc_rgb);
// 将颜色空间设置为 rgb
$jpeg->setImageColorspace(13);
// 修正伽马、色调、饱和度、亮度
if($php_vs < 5.3) {
// 为 5.2.x 调整伽马 20%
$jpeg->levelImage(0, 2.0, $range['quantumRangeString']);
} else {
// php 5.3 技巧,用于反转颜色
$jpeg->negateImage(false, Imagick::CHANNEL_ALL);
}
}
$jpeg->stripImage();
// 结束转换为 RGB =========================|
这些是将图像从 RGB 转换为 CMYK 的基本步骤
$image = new Imagick();
$image->readImage(rgb.jpg);
$image->setImageColorSpace(Imagick::COLORSPACE_CMYK);
$image->profileImage('icc', file_get_contents(/path/CoatedFOGRA27.icc'));
$image->negateImage(FALSE, imagick::COLOR_CYAN);
$image->negateImage(FALSE, imagick::COLOR_MAGENTA);
$image->negateImage(FALSE, imagick::COLOR_YELLOW);
$image->negateImage(FALSE, imagick::COLOR_BLACK);
$image->writeImage(cmyk.rgb);
这是在 [Windows] 上将 jpg 转换为单色的方法.. 因为我在其他地方找不到它。
<?php
header("Content-type: image/jpeg");
$IMagick = new IMagick('c:\\testing\\fruit.jpg');
$IMagick->setImageColorSpace(Imagick::COLORSPACE_GRAY);
echo $IMagick;
?>
如果您从 PDF 中获取奇怪/错误的颜色渲染,在尝试 jdstraughan 提到的颜色空间常量后,请尝试其他范围外的值。
在我的一种情况下,只有 $image->setImageColorSpace(22) 提供了有用的颜色。我在其他地方发现帖子使用了高达 255 的值。
这些是将图像从 RGB 转换为 CMYK 的基本步骤
$image = new Imagick();
$image->readImage(rgb.jpg);
$image->setImageColorSpace(Imagick::COLORSPACE_CMYK);
$image->profileImage('icc', file_get_contents(/path/CoatedFOGRA27.icc'));
$image->negateImage(FALSE, imagick::COLOR_CYAN);
$image->negateImage(FALSE, imagick::COLOR_MAGENTA);
$image->negateImage(FALSE, imagick::COLOR_YELLOW);
$image->negateImage(FALSE, imagick::COLOR_BLACK);
$image->writeImage(cmyk.rgb);
更多信息
http://www.cesarebordi.it/imagemagick-php-convertire-rgb-to-cmyk-web-developer/