Imagick::floodFillPaintImage

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

Imagick::floodFillPaintImageHedefle eşleşen piksellerin renklerini değiştirir

Açıklama

public Imagick::floodFillPaintImage(
    mixed $dolgu,
    float $benzerlik,
    mixed $hedef,
    int $x,
    int $y,
    bool $ters,
    int $kanal = Imagick::CHANNEL_DEFAULT
): bool

Hedefin ve yakın komşularının renk değerini değiştirir. Bu yöntem artık kullanımı önerilmeyen Imagick::paintFloodFillImage() işlevinin yerini almıştır. Bu yöntem, derleme sırasında ImageMagick kütüphanesinin 6.3.8 veya sonraki bir sürümü kuruluysa kullanılabilir.

Bağımsız Değişkenler

dolgu

Dolgu rengini içeren bir dizge veya bir ImagickPixel nesnesi.

benzerlik

Renkler arasındaki azami benzerlik. Örneğin bu değere 10 atarsanız, renk kırmızı ise ve kırmızının koyulukları 100 ve 102 ise bu iki renk aynı kabul edilir.

hedef

Boyanacak hedef rengi içeren bir dizge veya bir ImagickPixel nesnesi.

x

Renk değişikliğinin başlatılacağı X konumu.

y

Renk değişikliğinin başlatılacağı Y konumu.

ters

true belirtilirse hedefle eşlemeyen renkler değiştirilir.

kanal

Normalde kanal türü sabitlerinden biridir, ancak bitsel işleçler kullanılarak birden fazla kanal belirtilebilir. Imagick::CHANNEL_DEFAULT öntanımlıdır.

Dönen Değerler

Başarı durumunda true döner.

Örnekler

Örnek 1 - Imagick::floodfillPaintImage() örneği

<?php

/* Yeni bir imagick nesnesi oluştur */
$im = new Imagick();

/* kırmızı, yeşil ve mavi tuvaller oluştur */
$im->newImage(100, 50, "red");
$im->newImage(100, 50, "green");
$im->newImage(100, 50, "blue");

/* Bunları birbirlerine ekle */
$im->resetIterator();
$combined = $im->appendImages(true);

/* Elde edilen görüntüyü karşılaştırmak için sakla */
$combined->writeImage("floodfillpaint_intermediate.png");

/* Boyanacak hedef piksel */
$x = 1;
$y = 1;

/* Boyanacak pikselin rengini öğren */
$target = $combined->getImagePixelColor($x, $y);

/* Hedef pikseli ve aynı renkteki komşu pikselleri siyaha boya */
$combined->floodfillPaintImage("black", 1, $target, $x, $y, false);

/* Sonucu kaydet */
$combined->writeImage("floodfillpaint_result.png");
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Örnek çıktısı: Imagick::floodfillPaintImage()
Örnek çıktısı: Imagick::floodfillPaintImage()

add a note

User Contributed Notes 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