PHP 8.4.1 Released!

ImagickPixel::getColor

(PECL imagick 2, PECL imagick 3)

ImagickPixel::getColorRetorna a cor

Descrição

public ImagickPixel::getColor(int $normalized = 0): array

Retorna a cor descrita pelo objeto ImagickPixel, como um array. Se a cor tiver um canal de opacidade definido, ele será fornecido como o quarto valor da lista.

Parâmetros

normalized

Normaliza os valores de cor. Possíveis valores são 0, 1 ou 2.

Lista de valors possíveis para normalized
normalized Descrição
0 Os valores RGB são retornados como int no intervalo 0 a 255 (inclusive). O valor alfa é retornado como int e pode ser 0 ou 1.
1 Os valores RGB são retornados como float no intervalo 0 a 1 (inclusive).
2 Os valores RGB são retornados como int no intervalo 0 a 255 (inclusive).

Valor Retornado

Um array de calores de canal. Lança uma ImagickPixelException em caso de erro.

Exemplos

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

<?php

// Cria um ImagickPixel com a cor predefinida 'brown' (marrom)
$color = new ImagickPixel('brown');

// Define a cor com alfa de 25%
$color->setColorValue(Imagick::COLOR_ALPHA, 64 / 256.0);

$colorInfo = $color->getColor();

echo
"Valores padrão:".PHP_EOL;
print_r($colorInfo);

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

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

?>

O exemplo acima produzirá:

Valores padrão:
Array
(
    [r] => 165
    [g] => 42
    [b] => 42
    [a] => 0
)
Valores normalizados:
Array
(
    [r] => 0.64705882352941
    [g] => 0.16470588235294
    [b] => 0.16470588235294
    [a] => 0.25000381475547
)

adicione uma nota

Notas Enviadas por Usuários (em inglês) 1 note

up
3
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