Imagick::floodFillPaintImage

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

Imagick::floodFillPaintImageИзменяет значение цвета любого пикселя, соответствующего целевому

Описание

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

Изменяет значение цвета любого пикселя, соответствующего целевому и являющегося ближайшим соседом. Данный метод - замена устаревшему Imagick::paintFloodFillImage(). Метод доступен, если модуль Imagick скомпилировали с версией ImageMagick 6.3.8 или старше.

Список параметров

fill

Объект ImagickPixel или строка, содержащая цвет заливки.

fuzz

Мера округления (fuzz). Например, установите значение 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");
?>

Вывод приведённого примера будет похож на:

Вывод примера: Imagick::floodfillPaintImage()
Вывод примера: Imagick::floodfillPaintImage()

Добавить

Примечания пользователей 1 note

up
0
Anonymous
6 years ago
For fuzz, percentage or float values do not seem to work. The value is based on the intensity of the image colors.

The documentation states: "The amount of fuzz. For example, set fuzz to 10 and the color red at intensities of 100 and 102 respectively are now interpreted as the same color."

For those of us who are not graphics geeks, your color intensity might be something like 65535. In which case, to get just 10% fuzz, you need to set it to 6550.

You likely will not see any effect if you are using low numbers or floats, like 100, 20, or 0.8.

For example:
$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);

Credit to the discussion here:
https://php5.kiev.ua/php7/imagick.painttransparentimage.html
To Top