Start · Sprachen · PHP · Referenz · imagefill

imagefill

Funktion

Führt eine Flutfüllung (Flood Fill) ab der Position (<code>x</code>, <code>y</code>) mit der angegebenen Farbe im Bild durch.

seit PHP 4.0.0 Kategorie: image

Signatur

imagefill(GdImage $image, int $x, int $y, int $color): bool

Beschreibung

imagefill() füllt den zusammenhängenden Bereich ab dem angegebenen Startpunkt (x, y) mit einer Farbe auf — vergleichbar mit dem "Eimer"-Werkzeug in Grafikeditoren. Alle Pixel, die dieselbe Farbe wie der Startpixel haben und direkt oder indirekt benachbart sind, werden mit der neuen Farbe ersetzt.

Die Farbe wird mit imagecolorallocate() oder imagecolorallocatealpha() erzeugt. Beim Einsatz transparenter Farben in Echtfarbenbildern (imagecreatetruecolor()) sollte zuvor imagealphablending() auf false gesetzt werden, damit Transparenz korrekt gespeichert wird.

Die Funktion eignet sich besonders für das schnelle Einfärben von Flächen in dynamisch generierten Grafiken, z. B. bei Diagrammen, Karten oder einfachen Bildbearbeitungsschritten. Sie wirkt ausschließlich auf zusammenhängende gleichfarbige Bereiche — Pixel einer anderen Farbe bilden eine natürliche Grenze.

Parameter

Name Typ Default Beschreibung
$image Pflicht GdImage Ein gültiges GD-Bildobjekt, erzeugt z. B. mit imagecreatetruecolor() oder imagecreatefrompng().
$x Pflicht int Die horizontale Koordinate des Startpunkts (0 = linke Kante).
$y Pflicht int Die vertikale Koordinate des Startpunkts (0 = obere Kante).
$color Pflicht int Die Füllfarbe als Farbbezeichner, erzeugt mit imagecolorallocate().

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. ungültige Koordinaten oder ungültiges Bildobjekt).

Beispiele

Einfache Flutfüllung eines leeren Bildes

<?php
// Bild erstellen
$image = imagecreatetruecolor(200, 200);

// Farben definieren
$weiss = imagecolorallocate($image, 255, 255, 255);
$blau  = imagecolorallocate($image, 0, 0, 255);
$rot   = imagecolorallocate($image, 255, 0, 0);

// Hintergrund weiß füllen
imagefill($image, 0, 0, $weiss);

// Ein blaues Rechteck zeichnen
imagerectangle($image, 50, 50, 150, 150, $blau);

// Innerhalb des Rechtecks rot füllen
imagefill($image, 100, 100, $rot);

// Bild als PNG ausgeben
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>
(PNG-Bild: weißer Hintergrund mit blauem Rechteck, dessen Innenfläche rot gefüllt ist)

Flutfüllung mit Transparenz in einem Echtfarbbild

<?php
// Bild mit Alpha-Unterstützung erstellen
$image = imagecreatetruecolor(200, 200);
imagealphablending($image, false);
imagesavealpha($image, true);

// Transparente Hintergrundfarbe (alpha = 127 = vollständig transparent)
$transparent = imagecolorallocatealpha($image, 0, 0, 0, 127);
imagefill($image, 0, 0, $transparent);

// Roten Kreis zeichnen
$rot = imagecolorallocate($image, 220, 50, 50);
imagefilledellipse($image, 100, 100, 150, 150, $rot);

// Als PNG speichern (Transparenz bleibt erhalten)
imagepng($image, '/tmp/kreis_transparent.png');
imagedestroy($image);

echo 'Bild gespeichert.';
?>
Bild gespeichert.

// Wichtig · Fallstricke

Koordinaten prüfen: Liegt der Startpunkt (x, y) außerhalb der Bildgrenzen, schlägt die Funktion fehl. Koordinaten sollten stets validiert werden.

Transparenz: Bei der Verwendung von imagecolorallocatealpha() muss imagealphablending($image, false) gesetzt sein, damit Transparenz nicht mit dem bestehenden Hintergrund vermischt wird.

Performance: Bei sehr großen, zusammenhängenden Flächen kann die Flutfüllung je nach Bildgröße rechenintensiv sein. Für komplexe Fülloperationen sollten ressourcenschonende Alternativen (z. B. imagefilledrectangle() oder imagefilledpolygon()) in Betracht gezogen werden.