ImagickPixel::getColor

(PECL imagick 2, PECL imagick 3)

ImagickPixel::getColorDevuelve el color

Descripción

ImagickPixel::getColor(bool $normalized = false): array

Devuelve el color descrito por el objeto ImagickPixel, como un array. Si el color tiene establecido un canal de opacidad, es proporcionado como un cuarto valor de la lista.

Parámetros

normalized

Normalizar los valores del color

Valores devueltos

Un array de valores de canal, normalizados si se da true como parámetro. Lanza una ImagickPixelException si se produjo un error.

Ejemplos

Ejemplo #1 Uso básico de Imagick::getColor()

<?php

//Crear un ImagickPixel con el color predefinido 'brown'
$color = new ImagickPixel('brown');

//Establecer el color para que tenga un alfa de 25%
$color->setColorValue(Imagick::COLOR_ALPHA, 64 / 256.0);

$colorInfo = $color->getColor();

echo
"Valores estándar".PHP_EOL;
print_r($colorInfo);

$colorInfo = $color->getColor(true);

echo
"Valores normalizados:".PHP_EOL;
print_r($colorInfo);

?>

El resultado del ejemplo sería:

Valores estándar
Array
(
    [r] => 165
    [g] => 42
    [b] => 42
    [a] => 0
)
Valores normalizados:
Array
(
    [r] => 0.64705882352941
    [g] => 0.16470588235294
    [b] => 0.16470588235294
    [a] => 0.25000381475547
)
    

add a note add a note

User Contributed Notes 1 note

up
1
roman
11 years ago
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.
To Top