Signatur
Beschreibung
imageopenpolygon() zeichnet ein Polygon auf das angegebene Bild, verbindet dabei alle angegebenen Punkte durch Linien – lässt jedoch die letzte Verbindungslinie zwischen dem letzten und dem ersten Punkt weg. Das Ergebnis ist eine offene Linienkette (Polylinie), kein geschlossener Umriss.
Im Gegensatz zu imagepolygon() schließt diese Funktion die Form nicht, was sie ideal für offene Kurven, Pfade oder freihandähnliche Linien macht. Die Punkte werden als flaches Array übergeben, wobei je zwei aufeinanderfolgende Werte ein X-Y-Koordinatenpaar darstellen: [x0, y0, x1, y1, x2, y2, ...].
Die Farbe wird mit imagecolorallocate() oder imagecolorallocatealpha() erzeugt und als Integer übergeben. Zum Zeichnen gefüllter, geschlossener Polygone steht imagefilledpolygon() zur Verfügung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $image Pflicht | GdImage | Ein GD-Bildobjekt, das z. B. von imagecreatetruecolor() oder imagecreatefromjpeg() zurückgegeben wurde. |
|
| $points Pflicht | array | Ein flaches Array mit den Koordinaten der Eckpunkte in der Form [x0, y0, x1, y1, ...]. Das Array muss eine gerade Anzahl von Elementen enthalten, mindestens 4 (zwei Punkte). |
|
| $color Pflicht | int | Ein Farbbezeichner, der mit imagecolorallocate() oder imagecolorallocatealpha() erstellt wurde. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. ungültige Punktanzahl oder ungültiges Bild-Objekt).Beispiele
Einfaches offenes Polygon zeichnen
<?php
// Bild erstellen
$image = imagecreatetruecolor(300, 200);
// Hintergrundfarbe (weiß)
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
// Linienfarbe (blau)
$blue = imagecolorallocate($image, 0, 0, 200);
// Offenes Polygon zeichnen (Zickzack-Linie)
$points = [
20, 100, // Punkt 1
80, 20, // Punkt 2
140, 150, // Punkt 3
200, 40, // Punkt 4
260, 120, // Punkt 5
];
imageopenpolygon($image, $points, $blue);
// Bild als PNG ausgeben
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
Vergleich: offenes vs. geschlossenes Polygon
<?php
$image = imagecreatetruecolor(400, 200);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$red = imagecolorallocate($image, 200, 0, 0);
$green = imagecolorallocate($image, 0, 150, 0);
// Koordinaten für ein Dreieck (linke Hälfte)
$left = [30, 170, 100, 30, 170, 170];
// Offenes Dreieck (nur zwei Seiten sichtbar)
imageopenpolygon($image, $left, $red);
// Koordinaten für ein Dreieck (rechte Hälfte)
$right = [230, 170, 300, 30, 370, 170];
// Geschlossenes Dreieck (alle drei Seiten sichtbar)
imagepolygon($image, $right, $green);
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
// Wichtig · Fallstricke
PHP-Version: imageopenpolygon() wurde in PHP 8.0.0 eingeführt. In PHP 7.x kann imagepolygon() mit einem transparenten Alpha-Kanal als Workaround verwendet werden, jedoch ohne den gleichen Effekt.
Mindestanzahl an Punkten: Das $points-Array muss mindestens 4 Einträge (zwei Koordinatenpaare) enthalten. Bei einer ungeraden Anzahl oder weniger als 4 Elementen gibt die Funktion false zurück.
Signaturänderung: Vor PHP 8.0 existierte in einigen Versionen noch ein dritter Parameter $num_points für die Anzahl der Punkte. Dieser wurde in PHP 8.0 entfernt, die Funktion zählt die Punkte nun automatisch aus dem Array.