文字

ImagickPixel::getColor

(PECL imagick 2.0.0)

ImagickPixel::getColorReturns the color

说明

array ImagickPixel::getColor ([ bool $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.

上一篇: 下一篇: