©
本文档使用
php中文网手册 发布
(PECL imagick 2.0.0)
ImagickPixel::getColor — Returns the color
$normalized = false
] )Returns the color described by the ImagickPixel object, as an array. If the color has an opacity channel set, this is provided as a fourth value in the list.
normalized Normalize the color values
An array of channel values, each normalized if TRUE is given as param. Throws
ImagickPixelException on error.
Example #1 Basic Imagick::getColor() usage
<?php
//Create an ImagickPixel with the predefined color 'brown'
$color = new ImagickPixel ( 'brown' );
//Set the color to have an alpha of 25%
$color -> setColorValue ( Imagick :: COLOR_ALPHA , 64 / 256.0 );
$colorInfo = $color -> getColor ();
echo "Standard values" . PHP_EOL ;
print_r ( $colorInfo );
$colorInfo = $color -> getColor ( true );
echo "Normalized values:" . PHP_EOL ;
print_r ( $colorInfo );
?> 以上例程会输出:
Standard values
Array
(
[r] => 165
[g] => 42
[b] => 42
[a] => 0
)
Normalized values:
Array
(
[r] => 0.64705882352941
[g] => 0.16470588235294
[b] => 0.16470588235294
[a] => 0.25000381475547
)
[#1] roman [2013-05-10 21:27:40]
In case you use default un-normalized getColor value the alpha value will always be either 0 or 1.
If you want to use real full-range 0-1 alpha channel on your 24bit transparent images use the alpha value from the normalized one, even if you use the rest of unnormalized data.
To copy a 24bit png with real alpha transparency, you would have to do this:
<?php
$im=new Imagick( 'image.png' );
$iterator=$im->getPixelIterator();
foreach ($iterator as $row=>$pixels) {
foreach ( $pixels as $column => $pixel ){
$un_color=$pixel->getColor(); //unnormalized color
$nor_color=$pixel->getColor(true); //normalized color
$pixel->setColor('rgba('.$un_color['r'].','.$un_color['g'].','.$un_color['b'].','.$nor_color['a'].')');
}
}
?>
If you use 'a' (alpha) value from the unnormalized color there will only be binary transparency.