从CMYK到RGB转换的最简单方法
<?php
if ($jpeg->getImageColorspace() == \Imagick::COLORSPACE_CMYK) {
$jpeg->transformimagecolorspace(\Imagick::COLORSPACE_SRGB);
}
?>
它在当前稳定的ImageMagick (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);
}
?>
它在当前稳定的ImageMagick (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 用于颜色反转的hack
$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;
?>
如果使用jdstraughan提到的颜色空间常量后,PDF 的颜色渲染仍然异常/不佳,请尝试该范围外的其他值。
在我的一个案例中,只有`$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/