PHP Conference Japan 2024

Imagick::setImageColorspace

(PECL imagick 2, PECL imagick 3)

Imagick::setImageColorspace设置图像颜色空间

描述

public Imagick::setImageColorspace(int $colorspace): bool

设置图像颜色空间。创建新图像时应使用此方法。要更改现有图像的颜色空间,应使用Imagick::transformImageColorspace()

参数

colorspace

一个COLORSPACE 常量之一

返回值

成功时返回true

错误/异常

错误时抛出 ImagickException。

添加注释

用户贡献的注释 8 条注释

pilot114 at bk dot ru
9年前
从CMYK到RGB转换的最简单方法

<?php
if ($jpeg->getImageColorspace() == \Imagick::COLORSPACE_CMYK) {
$jpeg->transformimagecolorspace(\Imagick::COLORSPACE_SRGB);
}
?>

它在当前稳定的ImageMagick (6.9.0-4)中运行良好。
eth at ethaniel dot com
12年前
使用此函数从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 (); // 这将大大减小图像的大小(删除所有配置文件)
?>
jdstraughan dot com at gmail dot com
16年前
仅供参考,以下是 (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
kevin.a.florida
11年前
我有一个比之前发布的更好的解决方案来解决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=========================|
Cesare Bordi
7年前
以下是将图像从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);
mettedraq at gmail dot com
14年前
这是在[Windows]上将jpg转换为单色的方法……因为我在其他任何地方都找不到它。

<?php
header
("Content-type: image/jpeg");

$IMagick = new IMagick('c:\\testing\\fruit.jpg');
$IMagick->setImageColorSpace(Imagick::COLORSPACE_GRAY);

echo
$IMagick;
?>
charlie at midsouthhost dot com
14年前
如果使用jdstraughan提到的颜色空间常量后,PDF 的颜色渲染仍然异常/不佳,请尝试该范围外的其他值。

在我的一个案例中,只有`$image->setImageColorSpace(22)`才能提供有用的颜色。我在其他地方看到过使用高达 255 的值的帖子。
cesarebordi
7年前
以下是将图像从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/
To Top