Start · Sprachen · PHP · Referenz · imageopenpolygon

imageopenpolygon

Funktion

Zeichnet ein offenes Polygon (ohne schließende Linie zwischen erstem und letztem Punkt) auf ein GD-Bild.

seit PHP 8.0.0 Kategorie: image

Signatur

imageopenpolygon(GdImage $image, array $points, int $color): bool

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

Typ
bool
Beschreibung
Gibt 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);
(PNG-Bild mit einer blauen Zickzack-Linie ohne schließende Verbindung)

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);
(PNG-Bild: links rotes offenes Dreieck ohne Grundlinie, rechts grünes vollständig geschlossenes Dreieck)

// 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.