Imagick::getImagePixelColor

(PECL imagick 2, PECL imagick 3)

Imagick::getImagePixelColor返回指定像素的颜色

描述

public Imagick::getImagePixelColor(int $x, int $y): ImagickPixel

返回指定像素的颜色。

参数

x

像素的 x 坐标

y

像素的 y 坐标

返回值

返回给定坐标处颜色的 ImagickPixel 实例。

错误/异常

错误时抛出 ImagickException。

添加注释

用户贡献的注释 1 个注释

sheldon at hyperlinked dot com
12 年前
我相信有很多像我一样的人一直在想,“如何才能生成此操作的人类可读输出?”

<?php
$image
= new Imagick('testimage.jpg');

$x = 1;
$y = 1;
$pixel = $image->getImagePixelColor($x, $y);
?>

如果您尝试打印 $pixel 对象的输出,则没有任何内容。您必须使用其中一个 ImagickPixel 操作才能获得返回值。

您可以执行以下任一操作

<?php
$colors
= $pixel->getColor();
print_r($colors); // 生成 Array([r]=>255,[g]=>255,[b]=>255,[a]=>1);

$pixel->getColorAsString(); // 生成 rgb(255,255,255);
?>

我一直卡在的地方是如何将 Imagick::getImagePixelColor 操作中捕获的数据放入 ImagickPixel 对象中。我一直试图找到将值传递给新实例化的 ImagickPixel 对象的方法。好吧,看来一旦您使用 Imagick::getImagePixelColor 捕获了颜色数据,返回的就是 ImagickPixel 对象!

另外,如果您只是想在图像上的某个点采样颜色以将其插入另一个操作,则无需将其转换为人类可读格式。

例如,如果您想对特定颜色执行泛洪填充效果,可以将 ImagickPixel 对象的实例直接插入。

以下填充将在图像上坐标 1,1 处执行泛洪填充效果,使用绿色作为填充色,并使用 1,1 处采样的颜色作为要填充的目标颜色。

<?php
$hexcolor
= '#00ff00';
$fuzz = '4000';
$x = 1;
$y = 1;
$pixel = $image->getImagePixelColor($x, $y);
$image->floodfillPaintImage($hexcolor, $fuzz, $pixel, $x, $y, false);
?>
To Top