En PHP, ImageOpenPolygon () est une fonction utilisée pour dessiner des polygones ouverts (c'est-à-dire des polygones qui ne connectent pas automatiquement le point de départ et les segments de ligne de point final). Il est très utile lors de la gestion du dessin graphique, en particulier des formes de ligne personnalisées. Cependant, il existe en effet quelques différences dans le support et les performances de cette fonction dans différentes versions de PHP. Regardons de plus près ci-dessous.
La fonction ImageOpenPolygon () a été introduite dans PHP version 7.2.0 . Cette fonction n'était pas disponible dans les versions antérieures (telles que PHP 5.x ou PHP 7.0 / 7.1), donc si elle est utilisée dans des versions plus anciennes, elle conduira directement à des erreurs mortelles :
// PHP 7.1 Exécuter la version antérieure
$im = imagecreatetruecolor(200, 200);
$points = [50, 50, 150, 50, 150, 150, 50, 150];
// Cela entraînera une erreur fatale,Parce que la fonction n'existe pas
imageopenpolygon($im, $points, 4, imagecolorallocate($im, 255, 0, 0));
Dans PHP 7.2 et plus tard, le code ci-dessus est capable d'exécuter normalement et de dessiner un quad ouvert.
La définition de paramètre de base de ImageOpenPolygon () a été fixée depuis PHP 7.2, et la version suivante n'a pas changé. Ses paramètres sont:
bool imageopenpolygon(
GdImage $image,
array $points,
int $num_points,
int $color
)
$ Image : une ressource d'image créée par ImageCreateTrueColor () ou une fonction similaire.
$ Points : un tableau unidimensionnel contenant une série de coordonnées x et y.
$ num_points : nombre de sommets (plutôt que le nombre d'éléments de tableau).
$ Color : Line Color, créé par ImageColorAllocate () .
Après PHP 8.0, avec le renforcement du système de type global, la ressource de type de ressource (ressource) a été officiellement convertie en objet Gdimage . Ainsi, dans PHP 8.0+, il est strictement exigé que $ l'image soit une instance Gdimage , sinon TypeError sera déclenché.
Exemple (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);
Dans toutes les versions prises en charge (PHP 7.2+), ImageOpenPolygon () renvoie un booléen:
Succès : Retour True
Échec : retourne false
Notez qu'après PHP 8.0, si un paramètre non valide est passé (tel que le type non gdimage ), une exception TypeError sera directement jetée sans retourner faux .
PHP 7.2 - 7.4 : Passez le type de paramètre d'erreur, renvoie généralement faux et déclenche un e_warning.
PHP 8.0+ : Le type de paramètre d'erreur lance directement une exception TypeError, plus seulement un avertissement.
Exemple (démonstration de gestion des erreurs):
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";
}
Pour donner un exemple complet, utilisez ImageOpenPolygon () pour dessiner un polygone ouvert simple et sortir l'image au navigateur:
<?php
$im = imagecreatetruecolor(300, 300);
$background = imagecolorallocate($im, 255, 255, 255); // Fond blanc
$lineColor = imagecolorallocate($im, 0, 0, 255); // Lignes bleues
$points = [
50, 50,
250, 50,
250, 250,
50, 250
];
imagefill($im, 0, 0, $background);
imageopenpolygon($im, $points, 4, $lineColor);
// Sortie vers le navigateur
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>
Le navigateur accède à ce fichier PHP, par exemple:
https://m66.net/draw_polygon.php
Vous pouvez voir une boîte rectangulaire ouverte dessinée avec des lignes bleues.
Version PHP | Soutien | Remarque |
---|---|---|
<7.2 | Non pris en charge, l'appel est directement une erreur | |
7.2 - 7.4 | Types de paramètres pris en charge et lâche | La ressource est le type de ressource |
8.0+ | Exigences de paramètres prises en charge et strictes | Type gdimage, l'erreur lance directement une exception |
Par conséquent, en développement, si vous devez être compatible avec PHP 7.1 et ci-dessous, vous devez éviter d'utiliser ImageOpenPolygon () , ou effectuer des vérifications de version dans votre code. Dans l'environnement PHP 8,0+, l'attention doit être accordée pour taper la rigueur et les problèmes de gestion des exceptions.