Position actuelle: Accueil> Derniers articles> Différences dans les performances de ImageOpenPolygon () dans différentes versions PHP

Différences dans les performances de ImageOpenPolygon () dans différentes versions PHP

M66 2025-05-17

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.

1. Introduction de ImageOpenPolygon ()

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.

2. Modifications et spécifications des paramètres

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);

3. Comportement de valeur de retour

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 .

4. Gestion des erreurs

  • 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";
}

5. Démonstration du cas réel

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.

Résumer

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.