2024 年 PHP Conference Japan

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 - RGB 色彩空間 (RGBColorspace)
2 - 灰階色彩空間 (GRAYColorspace)
3 - 透明色彩空間 (TransparentColorspace)
4 - OHTA 色彩空間 (OHTAColorspace)
5 - LAB 色彩空間 (LABColorspace)
6 - XYZ 色彩空間 (XYZColorspace)
7 - YCbCr 色彩空間 (YCbCrColorspace)
8 - YCC 色彩空間 (YCCColorspace)
9 - YIQ 色彩空間 (YIQColorspace)
10 - YPbPr 色彩空間 (YPbPrColorspace)
11 - YUV 色彩空間 (YUVColorspace)
12 - CMYK 色彩空間 (CMYKColorspace)
13 - sRGB 色彩空間 (sRGBColorspace)
14 - HSB 色彩空間 (HSBColorspace)
15 - HSL 色彩空間 (HSLColorspace)
16 - HWB 色彩空間 (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];
如果 ($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);

//修正 gamma 值、色相、飽和度、亮度
if($php_vs < 5.3) {
//針對 5.2.x 版本,調整 GAMMA 值 20%
$jpeg->levelImage(0, 2.0, $range['quantumRangeString']);
} else {
//php 5.3 版本針對反轉顏色的修正
$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 年前
這是將 jpg 轉換為單色的方法 [在 Windows 上].. 因為我在其他地方找不到。

<?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 年前
如果您從 PDF 中得到奇怪/錯誤的顏色渲染,在嘗試了 jdstraughan 提到的色彩空間常數後,請嘗試該範圍之外的其他值。

在我的例子中,只有 $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