PHP Conference Japan 2024

ImagickPixel::getColor

(PECL imagick 2, PECL imagick 3)

ImagickPixel::getColor返回顏色

說明

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

以陣列形式返回 ImagickPixel 物件描述的顏色。如果顏色設定了不透明度通道,則會以列表中的第四個值提供。

參數

normalized(正規化)

正規化顏色值。可能的值為 012

normalized 的可能值列表
normalized(正規化) 說明
0 RGB 值以 int 類型返回,範圍為 0255(含)。Alpha 值以 int 類型返回,值為 01
1 RGBA 值以 float 類型返回,範圍為 01(含)。
2 RGBA 值以 int 類型返回,範圍為 0255(含)。

返回值

通道值的陣列。發生錯誤時拋出 ImagickPixelException。

範例

範例 #1 基本 Imagick::getColor() 用法

<?php

//建立一個使用預定義顏色 'brown' 的 ImagickPixel 物件
$color = new ImagickPixel('brown');

//設定顏色的 Alpha 值為 25%
$color->setColorValue(Imagick::COLOR_ALPHA, 64 / 256.0);

$colorInfo = $color->getColor();

echo
"標準值".PHP_EOL;
print_r($colorInfo);

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

echo
"正規化值:".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
11 年前
如果您使用預設的非正規化 getColor 值,則 Alpha 值將始終為 0 或 1。

如果您想在 24 位元透明圖像上使用真正的全範圍 0-1 Alpha 通道,請使用正規化值的 Alpha 值,即使您使用其餘的非正規化資料。

要複製具有真實 Alpha 透明度的 24 位元 png,您必須執行以下操作
<?php

$im
= new Imagick( 'image.png' );
$iterator= $im->getPixelIterator();
foreach (
$iterator as $row=>$pixels) {
foreach (
$pixels as $column => $pixel ){
$un_color= $pixel->getColor(); //未正規化的顏色
$nor_color= $pixel->getColor(true); //正規化的顏色
$pixel->setColor('rgba('.$un_color['r'].','.$un_color['g'].','.$un_color['b'].','.$nor_color['a'].')');
}
}
?>

如果您使用未正規化顏色的「a」(alpha)值,則只會有二進位透明度。
To Top