Imagick::setImageColorspace

(PECL imagick 2, PECL imagick 3)

Imagick::setImageColorspaceSets the image colorspace

Descrizione

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

Sets the image colorspace. This method should be used when creating new images. To change the colorspace of an existing image, you should use Imagick::transformImageColorspace().

Elenco dei parametri

colorspace

One of the COLORSPACE constants

Valori restituiti

Restituisce true in caso di successo.

Errori/Eccezioni

Lancia una ImagickException in caso di errore.

add a note

User Contributed Notes 8 notes

up
12
eth at ethaniel dot com
13 years ago
When converting from CMYK to RGB using this function, the image can become inverted. To fix this, use a workaround (don't forget to download the .icc files online): 

<?php 
// don't use this (it inverts the image) 
//    $img->setImageColorspace (imagick::COLORSPACE_RGB); 

if ($img->getImageColorspace() == Imagick::COLORSPACE_CMYK) { 
   $profiles = $img->getImageProfiles('*', false); 
   // we're only interested if ICC profile(s) exist 
   $has_icc_profile = (array_search('icc', $profiles) !== false); 
   // if it doesnt have a CMYK ICC profile, we add one 
   if ($has_icc_profile === false) { 
       $icc_cmyk = file_get_contents(dirname(__FILE__).'/USWebUncoated.icc'); 
       $img->profileImage('icc', $icc_cmyk); 
       unset($icc_cmyk); 
   } 
   // then we add an RGB profile 
   $icc_rgb = file_get_contents(dirname(__FILE__).'/sRGB_v4_ICC_preference.icc'); 
   $img->profileImage('icc', $icc_rgb); 
   unset($icc_rgb); 
} 

$img->stripImage (); // this will drop down the size of the image dramatically (removes all profiles) 
?>
up
8
pilot114 at bk dot ru
10 years ago
Simlest way converting from CMYK to RGB:<?phpif ($jpeg->getImageColorspace() == \Imagick::COLORSPACE_CMYK) {    $jpeg->transformimagecolorspace(\Imagick::COLORSPACE_SRGB);}?>It is pretty work in current stable Image Magick (6.9.0-4).
up
6
jdstraughan dot com at gmail dot com
16 years ago
FYI, here is the breakdown for (int $colorspace):Constants: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
up
2
kevin.a.florida
12 years ago
I have a better solution for solving inverted colors on php 5.3.x than posted.  All the other solutions I found darkens the image or messes with the colors.See below (note: my imagick object is $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) {                                    //make sure cmyk color-space is set correctly                $jpeg->setImageColorspace(12);                                    // then we add an RGB profile                $icc_rgb = file_get_contents(FRAMEWORK_PATH . DS . 'color' . DS . 'AdobeRGB1998.icc');                $jpeg->profileImage('icc', $icc_rgb);                unset($icc_rgb);                                    //set color space to rgb                $jpeg->setImageColorspace(13);                            //fix gamma, hue, saturation, brightness                if($php_vs < 5.3) {                    //ADJUST GAMMA BY 20% for 5.2.x                    $jpeg->levelImage(0, 2.0, $range['quantumRangeString']);                } else {                    //php 5.3 hack FOR INVERTED COLORS                    $jpeg->negateImage(false, Imagick::CHANNEL_ALL);                }                                }            $jpeg->stripImage();            //end convert to RGB=========================|
up
1
Cesare Bordi
7 years ago
These are the basic steps to convert an image from RGB to 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);
up
0
mettedraq at gmail dot com
15 years ago
This is how to Monochrome a jpg [on Windows].. since I couldn't find it anywhere else.

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

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

echo $IMagick;
?>
up
0
charlie at midsouthhost dot com
15 years ago
If your getting strange/bad color rendering from a PDF, after trying the colorspace constants noted by jdstraughan, try other values outside that range.In one case for me only $image->setImageColorSpace(22) provided useful color. I have found posts elsewhere using values up to 255.
up
-2
cesarebordi
7 years ago
These are the basic steps to convert an image from RGB to 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);For more information: http://www.cesarebordi.it/imagemagick-php-convertire-rgb-to-cmyk-web-developer/
To Top