Signatur
Beschreibung
imagefilltoborder() führt eine sogenannte Flood-Fill-Operation durch: Ausgehend vom Punkt (x, y) werden alle angrenzenden Pixel mit der angegebenen Füllfarbe eingefärbt, bis die Funktion auf Pixel der definierten Randfarbe (border_color) trifft. Die Füllung breitet sich also nur innerhalb der Grenzen aus, die durch die Randfarbe gebildet werden.
Diese Funktion eignet sich besonders gut, um geschlossene Formen wie Rechtecke, Kreise oder Polygone mit einer Farbe zu befüllen, ohne die Konturen zu überschreiben. Im Gegensatz zu imagefill(), das alle Pixel mit der gleichen Farbe wie der Startpunkt ersetzt, orientiert sich imagefilltoborder() an einer explizit definierten Randfarbe.
Wichtig: Der Startpunkt (x, y) muss sich innerhalb des zu füllenden Bereichs befinden und darf selbst nicht auf einem Rand-Pixel liegen. Wenn der Startpunkt auf der Randfarbe liegt oder der Bereich nicht vollständig durch die Randfarbe umschlossen ist, kann es zu unerwarteten Ergebnissen kommen.
Sowohl border_color als auch color müssen als Farb-Identifier angegeben werden, die zuvor mit imagecolorallocate() oder imagecolorallocatealpha() erzeugt wurden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $image Pflicht | GdImage | Das GD-Bildobjekt, auf das die Fülloperation angewendet wird. Wird typischerweise durch imagecreatetruecolor() oder eine ähnliche Funktion erzeugt. |
|
| $x Pflicht | int | Die x-Koordinate des Startpunkts der Flood-Fill-Operation (von links gemessen, beginnend bei 0). | |
| $y Pflicht | int | Die y-Koordinate des Startpunkts der Flood-Fill-Operation (von oben gemessen, beginnend bei 0). | |
| $border_color Pflicht | int | Die Randfarbe als Farb-Identifier. Die Füllung breitet sich aus, bis Pixel dieser Farbe erreicht werden. Muss mit imagecolorallocate() erzeugt worden sein. |
|
| $color Pflicht | int | Die Füllfarbe als Farb-Identifier. Alle innerhalb der Grenze liegenden Pixel werden mit dieser Farbe eingefärbt. Muss mit imagecolorallocate() erzeugt worden sein. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. ungültige Koordinaten oder ungültiges Bildobjekt).Beispiele
Rechteck mit Randfarbe füllen
<?php
// Bild erstellen
$image = imagecreatetruecolor(200, 200);
// Farben definieren
$weiss = imagecolorallocate($image, 255, 255, 255);
$schwarz = imagecolorallocate($image, 0, 0, 0);
$blau = imagecolorallocate($image, 0, 0, 255);
// Hintergrund weiß füllen
imagefill($image, 0, 0, $weiss);
// Schwarzes Rechteck zeichnen (nur Rahmen)
imagerectangle($image, 50, 50, 150, 150, $schwarz);
// Inneres des Rechtecks blau füllen
// Startpunkt (100,100) liegt innerhalb des Rechtecks
// Randfarbe ist schwarz
imagefilltoborder($image, 100, 100, $schwarz, $blau);
// Bild als PNG ausgeben
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>
Kreis mit bestimmter Randfarbe befüllen
<?php
// Bild erstellen
$image = imagecreatetruecolor(300, 300);
// Farben definieren
$hintergrund = imagecolorallocate($image, 240, 240, 240);
$rand = imagecolorallocate($image, 255, 0, 0); // roter Rand
$fuellfarbe = imagecolorallocate($image, 255, 255, 0); // gelbe Füllung
// Hintergrund setzen
imagefill($image, 0, 0, $hintergrund);
// Roten Kreis zeichnen (nur Umriss)
imagearc($image, 150, 150, 200, 200, 0, 360, $rand);
// Kreis von innen heraus gelb füllen
// Startpunkt (150,150) = Mittelpunkt des Kreises
imagefilltoborder($image, 150, 150, $rand, $fuellfarbe);
// Bild als PNG speichern
imagepng($image, '/tmp/kreis_gefuellt.png');
imagedestroy($image);
echo 'Bild gespeichert unter /tmp/kreis_gefuellt.png';
?>
// Wichtig · Fallstricke
Offene Bereiche: Wenn der durch border_color definierte Rahmen nicht vollständig geschlossen ist, füllt die Funktion möglicherweise weit mehr Fläche als beabsichtigt — bis zum Bildrand. Prüfe daher immer, ob der Bereich lückenlos von der Randfarbe umgrenzt ist.
Performance: Bei sehr großen Bildern oder komplexen Formen kann die Flood-Fill-Operation rechenintensiv sein, da sie rekursiv oder iterativ alle angrenzenden Pixel prüfen muss. Bei sehr tiefen Rekursionen kann ein Stack-Overflow-Fehler auftreten.
True-Color vs. Palette: Bei True-Color-Bildern werden Farben exakt verglichen. Antialiasing-Kanten (z. B. durch imageantialias()) können dazu führen, dass leicht abweichende Pixel nicht als Randfarbe erkannt werden und die Füllung ausbricht.
Koordinaten: Koordinaten außerhalb der Bildgrenzen führen zu einem Fehler. Der Startpunkt darf nicht auf einem Pixel der Randfarbe liegen, da die Füllung sonst nicht startet.