Im PHP ist ImageOpenPolygon () eine Funktion, mit der offene Polygone gezogen werden (d. H. Polygone, die die Segmente des Startpunkts und der Endpunktlinie nicht automatisch verbinden). Es ist sehr nützlich, wenn es um grafische Zeichnen geht, insbesondere mit benutzerdefinierten Linienformen. Es gibt jedoch in der Tat einige Unterschiede in der Unterstützung und Leistung dieser Funktion in verschiedenen Versionen von PHP. Lassen Sie uns unten einen genaueren Blick darauf werfen.
Die ImageOpenPolygon () -Funktion wurde in PHP Version 7.2.0 eingeführt. Diese Funktion war in früheren Versionen (z. B. PHP 5.x oder PHP 7.0/7.1) nicht verfügbar. Wenn sie also in älteren Versionen verwendet werden, führt sie direkt zu tödlichen Fehlern :
// PHP 7.1 Frühere Version ausführen
$im = imagecreatetruecolor(200, 200);
$points = [50, 50, 150, 50, 150, 150, 50, 150];
// Dies führt zu einem tödlichen Fehler,Weil die Funktion nicht existiert
imageopenpolygon($im, $points, 4, imagecolorallocate($im, 255, 0, 0));
In PHP 7.2 und später kann der obige Code normal ausführen und ein offenes Quad zeichnen.
Die grundlegende Parameterdefinition von ImageOpenPolygon () wurde seit Php 7.2 behoben, und die nachfolgende Version hat sich nicht geändert. Seine Parameter sind:
bool imageopenpolygon(
GdImage $image,
array $points,
int $num_points,
int $color
)
$ bild : Eine von ImageCreatTueColor () oder ähnliche Funktion erstellte Bildressource.
$ Punkte : Ein eindimensionales Array mit einer Reihe von X- und Y-Koordinaten.
$ num_points : Anzahl der Scheitelpunkte (anstelle der Anzahl der Array -Elemente).
$ color : Linienfarbe, erstellt von ImageColOralCocate () .
Nach PHP 8.0 wurde die Ressourcentyp -Ressource (Ressource) mit der Stärkung des Gesamttypsystems offiziell in ein GDIMage -Objekt umgewandelt. In PHP 8.0+ ist es also ausschließlich erforderlich, dass $ Image eine GDIMAGE -Instanz sein muss, da ansonsten TypenError ausgelöst werden.
Beispiel (PHP 8.0+):
$im = imagecreatetruecolor(200, 200);
$red = imagecolorallocate($im, 255, 0, 0);
$points = [50, 50, 150, 50, 150, 150, 50, 150];
imageopenpolygon($im, $points, 4, $red);
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
In allen unterstützten Versionen (Php 7.2+) gibt ImageOpenPolygon () einen Booleschen zurück:
Erfolg : Return True
Fehlgeschlagen : Falsch zurückgeben
Beachten Sie, dass nach PHP 8.0, wenn ein ungültiger Parameter übergeben wird (z. B. Nicht- GDIMAGE -Typ), eine TypeERror-Ausnahme direkt ausgeworfen wird, ohne Falsch zurückzugeben.
Php 7.2 - 7.4 : Übergeben Sie den Fehlerparametertyp, gibt normalerweise Falsch zurück und löst eine E_WARNING aus.
PHP 8.0+ : Der Fehlerparametertyp bringt direkt eine TypeERRor -Ausnahme aus, nicht mehr nur eine Warnung.
Beispiel (Demonstration der Fehlerbehandlung):
try {
$invalidImage = 'not a resource';
$points = [10, 10, 20, 20, 30, 10];
imageopenpolygon($invalidImage, $points, 3, 0xFF0000);
} catch (TypeError $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
Um ein vollständiges Beispiel zu geben, verwenden Sie ImageOpenpolygon () , um ein einfaches offenes Polygon zu zeichnen und das Bild an den Browser auszugeben:
<?php
$im = imagecreatetruecolor(300, 300);
$background = imagecolorallocate($im, 255, 255, 255); // Weißer Hintergrund
$lineColor = imagecolorallocate($im, 0, 0, 255); // Blaue Linien
$points = [
50, 50,
250, 50,
250, 250,
50, 250
];
imagefill($im, 0, 0, $background);
imageopenpolygon($im, $points, 4, $lineColor);
// Ausgabe zum Browser
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>
Der Browser greift beispielsweise auf diese PHP -Datei zu:
https://m66.net/draw_polygon.php
Sie können eine offene rechteckige Box sehen, die mit blauen Linien gezeichnet ist.
PHP -Version | Unterstützung | Bemerkung |
---|---|---|
<7.2 | Nicht unterstützt, der Anruf ist direkt fehlerhaft | |
7.2 - 7,4 | Unterstützte, lose Parametertypen | Die Ressource ist Ressourcentyp |
8.0+ | Unterstützt, strenge Parameteranforderungen | GDIMAGE -Typ, Fehler löst die Ausnahme direkt aus |
Wenn Sie in der Entwicklung mit PHP 7.1 und unten kompatibel sein müssen, sollten Sie es vermeiden, imageOpenpolygon () zu verwenden oder Versionsprüfungen in Ihrem Code durchzuführen. In der Umgebung von PHP 8.0+ sollte die Aufmerksamkeit für die Typ -Strenge und Ausnahmebehandlungsprobleme geschenkt werden.