PHP Conference Japan 2024

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 条注释

12
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); // 输出数组([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