CakeFest 2024: The Official CakePHP Conference

ImagickPixel::getColor

(PECL imagick 2, PECL imagick 3)

ImagickPixel::getColorBir renk döndürür

Açıklama

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

ImagickPixel nesnesiyle tanımlanmış rengi bir dizi olarak döndürür. Renk bir matlık kanalına sahipse bu dördüncü bir elemanla sağlanır.

Bağımsız Değişkenler

normal

Renk değerleri normalleştirilmiş mi? Olası değerler: 0, 1 veya 2.

normal için olası değerler:
normal Açıklama
0 RGB değeri olarak 0 ile 255 (dahil) arasında tamsayı bir değer, şeffaflık değeri olarak ise tamsayı olarak 0 veya 1 döner.
1 RGBA değeri olarak 0 ile 1 (dahil) arasında bir gerçel sayı döner.
2 RGBA değeri olarak 0 ile 255 (dahil) arasında tamsayı bir değer döner.

Dönen Değerler

Kanal değerlerini içeren bir dizi. Bağımsız değişken olarak true belirtilmişse elemanların her biri normalleştirilmiş bir değer içerir. Bir hata durumunda ImagickPixelException yavrulanır.

Örnekler

Örnek 1 - Imagick::getColor() temel kullanım örneği

<?php

// Kahverengi bir ImagickPixel nesnesi oluştur
$color = new ImagickPixel('brown');

// %25 şeffaflık/matlık olsun
$color->setColorValue(Imagick::COLOR_ALPHA, 64 / 256.0);

$colorInfo = $color->getColor();

echo
"Standart değerler".PHP_EOL;
print_r($colorInfo);

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

echo
"Normalleştirilmiş değerler:".PHP_EOL;
print_r($colorInfo);

?>

Yukarıdaki örneğin çıktısı:

Standart değerler
Array
(
    [r] => 165
    [g] => 42
    [b] => 42
    [a] => 0
)
Normalleştirilmiş değerler:
Array
(
    [r] => 0.64705882352941
    [g] => 0.16470588235294
    [b] => 0.16470588235294
    [a] => 0.25000381475547
)

add a note

User Contributed Notes 1 note

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