PHP Imagick floodFillPaintImage() 函数
任何与目标匹配并且是直接邻居的像素的颜色值都会被更改。这个函数是 Imagick::paintFloodFillImage 的替代品,该函数已被弃用。如果 Imagick 编译时使用的是 ImageMagick 版本在6.3.8或更高,这个方法是可用的。
参数
Fill
一个包含填充颜色或 ImagickPixel 对象的字符串
fuzz
模糊度的级别。将模糊度设置为十,并且颜色为红色和绿色,强度分别为100和102,现在被视为相同的颜色。
target
ImagickPixel 对象或指定要绘制的颜色的字符串
x
x 方向的开始点
y
y 方向的开始点
invert
如果为 true,则绘制与期望的颜色不匹配的每个像素。
channel
为通道模式提供任何有效的通道常数。使用位运算符将通道常数组合以应用于多个通道。Imagick::CHANNEL DEFAULT 是默认值。可以在这里找到通道常量的列表。
返回类型
flood fill paint image 函数的返回类型是布尔类型,这意味着这个函数的返回值要么是 true,要么是 false,取决于操作的成功或失败。当洪水填充操作成功地应用到作为参数传递给这个函数的目标像素或一组像素时,flood fill paint image 函数的返回类型为 true;而当作为参数指定的目标像素上的洪水填充操作不成功时,这个函数的返回类型将被更改为 false。
代码
<?php
/* Create new imagick object */
im = new Imagick();
/* create red, green and blue images */im->newImage(100, 50, "red");
im->newImage(100, 50, "green");im->newImage(100, 50, "blue");
/* Append the images into one */
im->resetIterator();combined = im->appendImages(true);
/* Save the intermediate image for comparison */combined->writeImage("floodfillpaint_intermediate.png");
/* The target pixel to paint */
x = 1;y = 1;
/* Get the color we are painting */
target =combined->getImagePixelColor(x,y);
/* Paints pixel in position 1,1 black and all neighboring
pixels that match the target color */
combined->floodfillPaintImage("black", 1,target, x,y, false);
/* Save the result */
$combined->writeImage("floodfillpaint_result.png");
?>
输出:
在上述代码中,首先我们创建了一个Imagick对象,然后使用该对象创建了三个红色、绿色和蓝色的图像,将这三个图像添加到了一个单一的图像中,并将其保存。一旦我们准备好了初始图像,下一步是更改特定集合的目标像素的颜色,为了更改指定目标集合像素的颜色,我们使用了PHP中的flood fill paint image函数,将目标颜色更改为黑色,成功转换指定集合像素颜色后,将结果图像保存为PNG格式的另一个图像。
另一个示例
$im = new Imagick();
$transparentColor = new ImagickPixel('transparent');
$greenscreen = '#00FF08'; // Super bright green
$im->readImage("cartoon_dog.png"); // Cartoony dog with a black outline and a #00FF08 (super bright green) background.
// Replace the green background with transparent.
// Leaves significant green lines around the outline of the dog, which is unacceptable.
$im->floodFillPaintImage($transparentColor, 30, $greenscreen, 0, 0, false, Imagick::CHANNEL_ALPHA);
// Works as intended - removes all of the green background.
$im->floodFillPaintImage($transparentColor, 30000, $greenscreen, 0, 0, false, Imagick::CHANNEL_ALPHA);
在这个示例中,我们讨论了一个特定的案例,其中我们可以通过这个函数减少噪音。首先,在这个示例中,我们创建了一个Imagick对象,并打开了我们要执行操作的图像。第一个操作是使用透明色移除背景,所以当我们第一次使用flood fill paint image函数时,大部分部分都被移除了,但图像中仍然存在一些背景颜色。为了减少这个错误率,我们再次调用了flood fill paint image函数,只是使用了一些不同的参数值。通过这些不同的参数值,我们能够完全去除指定图像的背景颜色。
因此,在本文中,我们看到了如何在PHP中使用Imagick flood fill paint image函数来填充我们指定目标像素集的所需颜色。