Start · Sprachen · PHP · Referenz · imagepolygon

imagepolygon

Funktion

Zeichnet ein Polygon (nicht ausgefüllt) in ein GD-Bild-Objekt anhand einer Liste von Koordinatenpunkten.

seit PHP 5.0.0 Kategorie: image

Signatur

imagepolygon(GdImage $image, array $points, int $num_points_or_color, int $color = ?): bool

Beschreibung

imagepolygon() zeichnet die Umrisslinie eines Polygons in das angegebene Bild. Die Eckpunkte werden als flaches Array aus abwechselnden X- und Y-Koordinaten übergeben, also [x1, y1, x2, y2, ...]. Der erste und der letzte Punkt werden automatisch verbunden, sodass ein geschlossenes Vieleck entsteht.

Ab PHP 8.0 hat die Funktion eine vereinfachte Signatur: Der Parameter num_points entfällt, und color wird direkt als dritter Parameter übergeben. In PHP 7 und früher war num_points noch als dritter Parameter erforderlich und color als vierter.

Die Funktion eignet sich für alle geometrischen Formen mit beliebig vielen Ecken, z. B. Dreiecke, Rauten, Sterne oder unregelmäßige Vielecke. Soll das Polygon ausgefüllt werden, kann stattdessen imagefilledpolygon() verwendet werden.

Der Farbwert muss zuvor mit imagecolorallocate() oder imagecolorallocatealpha() erstellt werden. Beim Zeichnen auf Truecolor-Bildern sind auch Transparenzeffekte möglich.

Parameter

Name Typ Default Beschreibung
$image Pflicht GdImage Ein GD-Bild-Objekt, das z. B. mit imagecreatetruecolor() oder imagecreatefromjpeg() erzeugt wurde.
$points Pflicht array Ein flaches Array mit den Koordinaten aller Eckpunkte des Polygons im Format [x1, y1, x2, y2, ..., xN, yN]. Die Anzahl der Elemente muss gerade und mindestens 6 (3 Punkte) sein.
$num_points_or_color Pflicht int PHP < 8.0: Anzahl der Eckpunkte (Anzahl der Paare im points-Array). PHP ≥ 8.0: Direkt der Farbwert (Ganzzahl), den imagecolorallocate() zurückgibt. In PHP 8 entfällt der separate num_points-Parameter.
$color int Nur in PHP < 8.0 erforderlich: Der Farbwert als Ganzzahl, erzeugt mit imagecolorallocate(). Ab PHP 8.0 wird dieser Parameter nicht mehr verwendet.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. ungültige Bildressource oder zu wenige Punkte).

Beispiele

Einfaches Dreieck zeichnen (PHP 8)

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

// Hintergrundfarbe (weiß)
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);

// Linienfarbe (rot)
$red = imagecolorallocate($image, 255, 0, 0);

// Dreieck-Koordinaten: 3 Punkte
$points = [
    100, 10,   // Spitze oben
    190, 190,  // rechts unten
    10,  190,  // links unten
];

// Ab PHP 8.0: kein num_points-Parameter mehr
imagepolygon($image, $points, $red);

// PNG ausgeben
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
(PNG-Bild mit einem roten Dreieck auf weißem Hintergrund)

Sechseck zeichnen und als Datei speichern (PHP 7-kompatibel)

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

// Hintergrund schwarz
$black = imagecolorallocate($image, 0, 0, 0);
imagefill($image, 0, 0, $black);

// Linienfarbe gelb
$yellow = imagecolorallocate($image, 255, 220, 0);

// Sechseck berechnen (Mittelpunkt 150/150, Radius 120)
$cx = 150;
$cy = 150;
$r  = 120;
$points = [];
for ($i = 0; $i < 6; $i++) {
    $angle = deg2rad(60 * $i - 30);
    $points[] = (int) round($cx + $r * cos($angle));
    $points[] = (int) round($cy + $r * sin($angle));
}

// PHP 7-Stil: num_points als dritter Parameter
imagepolygon($image, $points, 6, $yellow);

// In Datei speichern
imagepng($image, '/tmp/hexagon.png');
imagedestroy($image);
echo 'Sechseck gespeichert.';
Sechseck gespeichert.

// Wichtig · Fallstricke

Signaturänderung in PHP 8.0: Der Parameter num_points wurde entfernt. Code, der imagepolygon($img, $pts, count($pts)/2, $color) verwendet, muss für PHP 8 auf imagepolygon($img, $pts, $color) angepasst werden. Wird die alte Signatur unter PHP 8 verwendet, interpretiert PHP den dritten Parameter als Farbe, was zu unerwarteten Ergebnissen führt.

Das points-Array muss mindestens 3 Punkte (6 Einträge) enthalten. Weniger Punkte führen dazu, dass false zurückgegeben wird und eine Warnung ausgelöst werden kann.

Für ausgefüllte Polygone steht imagefilledpolygon() zur Verfügung. Anti-Aliasing ist mit imageantialias() aktivierbar, was die Linienqualität verbessert.