📜  PHP | Imagick floodFillPaintImage()函数

📅  最后修改于: 2022-05-13 01:54:11.067000             🧑  作者: Mango

PHP | Imagick floodFillPaintImage()函数

Imagick floodFillPaintImage()函数是PHP的一个内置函数,用于更改与目标匹配的任何像素的颜色值,以及与其直接相邻的相同颜色的像素。

注意:此方法替代了已弃用的 Imagick::paintFloodFillImage()函数,如果 Imagick 已针对 ImageMagick 6.3.8 或更高版本编译,则该方法可用。

句法:

bool Imagick::floodFillPaintImage 
( mixed $fill, float $fuzz, mixed $target, int $x, int $y, bool $invert 
[, int $channel = Imagick::CHANNEL_DEFAULT ] )  

参数:从上面的语法可以看出,该函数有七个参数。他们是:

  • 填充(混合类型) :这个参数是一个 ImagickPixel 对象或一个包含填充颜色的字符串,我们需要使用这个函数在像素上填充的颜色。
  • fuzz (Float type) :这个参数定义了模糊量。模糊值基于图像颜色的强度。
  • target (Mixed type) :这个参数是一个 ImagickPixel 对象或一个包含要绘制的目标颜色的字符串。
  • x (Int type) : 这个参数给出了洪水填充的 X 坐标起始位置。
  • y(Int type) :该参数给出了洪水填充的 Y 坐标起始位置。
  • 反转(混合类型) :如果设置为 TRUE,则绘制与目标颜色不匹配的任何像素。简而言之,这以相反的方式工作(因此反转),以填充除目标颜色之外的剩余像素。如果我们只想填充目标颜色,那么默认情况下我们会将其设置为 FALSE。
  • channel (Int type) :此参数用于提供根据我们的要求有效的任何通道常量。如果不需要通道,我们不需要定义它(只能使用带有上述六个参数的函数)。

注意:在此处的“混合类型”上下文中,请注意PHP中的“混合”关键字不是原始类型,不能用于编程。这里使用混合类型来表示类型可以是任何类型。



返回值:该函数在成功时返回 True。

下面的例子说明了PHP的 Imagick::floodFillPaintImage()函数:示例:让我们考虑两个块,一个黑色和一个绿色(190×90 尺寸):

现在,我们将编写一个PHP程序来说明 Imagick::floodFillPaintImage()函数。

  • 程序:
    resetIterator();
     $combined = $imagick->appendImages(true);
       
     // Save the image for comparison:
     $combined->writeImage("blackgreenobjects.png");
       
     // Set (x, y) values for 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) and all neighboring pixels 
    //that match the target color (black) to green color:
     $combined->floodfillPaintImage("green", 1, $target, $x, $y, false);
       
     // Save the resulting image:
     $combined->writeImage("greengreenfill.png"); 
       
     // Display resulting image:
     echo $combined;                   
       
    ?>
    

    输出:此代码将首先在一个名称下创建两个 Imagick 对象,一个黑色块和一个绿色块,然后将它们附加到一个中(连续的对象附加在第一个对象下方)。

    • 保存的图像如下所示:
    • 然后使用 floodfillPaintImage()函数,我们将 (x=1, y=1) 位置的像素及其相邻像素着色/填充为绿色。 (1, 1) 位置的像素被着色为黑色(作为它的第一个块),因此该像素及其相邻的黑色像素(在一个链中,直到颜色改变,填充像“洪水”蔓延)得到充满了我们给定的绿色。
      保存的图像如下所示:

    注意:如果在目标颜色为绿色的情况下再次使用该函数,我们最初定义的两个块都会更改为填充颜色,因为它们现在具有相同的颜色。