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');

// 设置颜色为 25% 的 alpha 值
$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 条注释

3
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