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