將 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 - 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)
我有一個比貼出的更好的解決方案,可以解決 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 轉換結束=========================|
這些是將影像從 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');
這是將 jpg 轉換為單色的方法 [在 Windows 上].. 因為我在其他地方找不到。
<?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/