Imagick::floodFillPaintImage

(PECL imagick 2 >= 2.3.0, PECL imagick 3)

Imagick::floodFillPaintImage更改与目标匹配的任何像素的颜色值

描述

public Imagick::floodFillPaintImage(
    混合 $fill,
    浮点 $fuzz,
    混合 $target,
    整数 $x,
    整数 $y,
    布尔 $invert,
    整数 $channel = Imagick::CHANNEL_DEFAULT
): 布尔

更改与目标匹配且是直接相邻像素的颜色值。此方法是已弃用方法 Imagick::paintFloodFillImage() 的替代方法。如果 Imagick 针对 ImageMagick 版本 6.3.8 或更高版本编译,则此方法可用。

参数

fill

ImagickPixel 对象或包含填充颜色的字符串

fuzz

模糊量。例如,将模糊设置为 10,强度分别为 100 和 102 的红色将被解释为相同的颜色。

target

ImagickPixel 对象或包含要绘制的目标颜色的字符串

x

泛洪填充的 X 起始位置

y

泛洪填充的 Y 起始位置

invert

如果为 true,则绘制任何不匹配目标颜色的像素。

channel

提供对您的通道模式有效的任何通道常量。要应用于多个通道,请使用按位运算符组合 通道常量。默认为 Imagick::CHANNEL_DEFAULT。参考此 通道常量 列表

返回值

成功时返回 true

示例

示例 #1 Imagick::floodfillPaintImage() 示例

<?php

/* 创建新的 Imagick 对象 */
$im = new Imagick();

/* 创建红色、绿色和蓝色图像 */
$im->newImage(100, 50, "red");
$im->newImage(100, 50, "green");
$im->newImage(100, 50, "blue");

/* 将图像附加到一个图像中 */
$im->resetIterator();
$combined = $im->appendImages(true);

/* 保存中间图像以供比较 */
$combined->writeImage("floodfillpaint_intermediate.png");

/* 要绘制的目标像素 */
$x = 1;
$y = 1;

/* 获取我们绘制的颜色 */
$target = $combined->getImagePixelColor($x, $y);

/* 将位置 1,1 的像素绘制为黑色,并将所有与目标颜色匹配的相邻像素绘制为黑色 */
$combined->floodfillPaintImage("black", 1, $target, $x, $y, false);

/* 保存结果 */
$combined->writeImage("floodfillpaint_result.png");
?>

上面的示例将输出类似以下内容

Output of example : Imagick::floodfillPaintImage()
Output of example : Imagick::floodfillPaintImage()

添加注释

用户贡献的注释 1 条注释

匿名
5 年前
对于模糊,百分比或浮点数似乎不起作用。该值基于图像颜色的强度。

文档中指出:“模糊量。例如,将模糊设置为 10,强度分别为 100 和 102 的红色将被解释为相同的颜色。”

对于我们这些不是图形极客的人来说,您的颜色强度可能类似于 65535。在这种情况下,要获得 10% 的模糊,您需要将其设置为 6550。

如果您使用的是较小的数字或浮点数,例如 100、20 或 0.8,则您可能看不到任何效果。

例如
$im = new Imagick();
$transparentColor = new ImagickPixel('transparent');
$greenscreen = '#00FF08'; // 超亮绿色

$im->readImage("cartoon_dog.png"); // 带有黑色轮廓和 #00FF08(超亮绿色)背景的卡通狗。

// 将绿色背景替换为透明。

// 在狗的轮廓周围留下了明显的绿色线条,这是不可接受的。
$im->floodFillPaintImage($transparentColor, 30, $greenscreen, 0, 0, false, Imagick::CHANNEL_ALPHA);

// 按预期工作 - 删除所有绿色背景。
$im->floodFillPaintImage($transparentColor, 30000, $greenscreen, 0, 0, false, Imagick::CHANNEL_ALPHA);

感谢以下讨论
https://php5.kiev.ua/php7/imagick.painttransparentimage.html
To Top