PHP | Función Imagick floodFillPaintImage()

La función Imagick floodFillPaintImage() es una función integrada en PHP que se utiliza para cambiar el valor de color de cualquier píxel que coincida con el objetivo, junto con los píxeles vecinos inmediatos del mismo color.

Nota: Este método es un reemplazo para la función obsoleta Imagick::paintFloodFillImage() y está disponible si Imagick se ha compilado contra ImageMagick versión 6.3.8 o superior.

Sintaxis:

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

Parámetros: La función tiene siete parámetros como podemos ver en la sintaxis anterior. Están:

  • relleno (tipo mixto) : este parámetro es un objeto ImagickPixel o una string que contiene el color de relleno, el color que necesitamos para rellenar los píxeles con esta función.
  • fuzz (tipo flotante) : este parámetro define la cantidad de fuzz. El valor de fuzz se basa en la intensidad de los colores de la imagen.
  • destino (tipo mixto) : este parámetro es un objeto ImagickPixel o una string que contiene el color de destino para pintar.
  • x (tipo Int) : este parámetro proporciona la posición de inicio de la coordenada X del relleno de inundación.
  • y(Int type) : Este parámetro proporciona la posición de inicio de la coordenada Y del relleno de inundación.
  • invertir (tipo mixto) : si se establece en VERDADERO, pinta cualquier píxel que no coincida con el color de destino. En resumen, esto funciona al revés (por lo tanto, invertir), para llenar los píxeles restantes aparte del color de destino. Si queremos que el color de destino solo se rellene, entonces lo estableceremos en FALSO de forma predeterminada.
  • canal (tipo Int) : este parámetro se utiliza para proporcionar cualquier constante de canal que sea válida según nuestros requisitos. Si no se requiere ningún canal, no necesitamos definirlo (puede usar la función solo con los seis parámetros anteriores).

Nota: En el contexto de ‘Tipo mixto’ aquí, tenga en cuenta que la palabra clave ‘Mixed’ en PHP no es un tipo primitivo y no se puede usar en la programación. El tipo mixto se usa aquí para transmitir que el tipo puede ser de cualquier tipo.

Valor devuelto: la función devuelve True en caso de éxito.

El siguiente ejemplo ilustra la función Imagick::floodFillPaintImage() en PHP:

Ejemplo: Consideremos dos bloques, uno negro y otro verde (de una dimensión de 190×90):

Ahora, escribiremos un programa PHP que ilustre la función Imagick::floodFillPaintImage().

  • Programa:

    <?php
       
     // Create new imagick objects for the blocks under one name: 
     $imagick = new Imagick(
    'https://media.geeksforgeeks.org/wp-content/uploads/20190720123909/black1.png"
         alt=""
         width="190" 
         height="90" 
         class="alignnone 
         size-full wp-image-1167659');
     $imagick = new Imagick(
     'https://media.geeksforgeeks.org/wp-content/uploads/20190720123923/green3.png"
         alt=""
         width="190"
         height="90"
         class="alignnone
         size-full wp-image-1167665');
                      
     // Append the images into one:
     $imagick->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;                   
       
    ?>
  • Salida: este código primero crearía dos objetos Imagick con un nombre, un bloque negro y uno verde, y luego los agregaría a uno (los objetos consecutivos se agregan debajo del primer objeto).

    • La imagen guardada se parece a:
    • Luego, usando la función floodfillPaintImage(), coloreamos/rellenamos el píxel en la posición (x=1, y=1) y sus píxeles vecinos con el mismo color verde. el píxel en la posición (1, 1) es de color negro (como es el primer bloque) y, por lo tanto, este píxel junto con sus vecinos de color negro (en una string hasta que el color cambia, el relleno se extiende como una ‘inundación’) obtener lleno de nuestro color verde dado.
      La imagen guardada se parece a:

    Nota: si usa la función nuevamente con el color de destino verde, nuestros dos bloques definidos inicialmente cambiarían al color de relleno porque ahora ambos tienen el mismo color.

    Publicación traducida automáticamente

    Artículo escrito por Anirban166 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *