Lorsque vous dessinez des polygones ouverts en utilisant la fonction ImageOpenPolygon () de PHP, vous rencontrez parfois des situations où le faux est renvoyé. Cela signifie souvent des erreurs de passage de paramètres, des problèmes de ressources d'image ou un problème avec la méthode d'appel. Cet article commencera des erreurs courantes et analysera progressivement les causes et solutions possibles pour vous aider à localiser et à corriger rapidement les problèmes.
ImageOpenPolygon () fait partie de la bibliothèque de traitement graphique GD. Si la bibliothèque GD n'est pas installée correctement dans l'environnement du serveur, l'appel de toute fonction GD échouera. Il peut être détecté par le code suivant:
<?php
if (function_exists('imageopenpolygon')) {
echo "GD La bibliothèque est installée,Et soutien imageopenpolygon() fonction。";
} else {
echo "GD La bibliothèque n'est pas installée ou non prise en charge imageopenpolygon() fonction,Vérifiez, s'il vous plaît PHP Configuration。";
}
?>
Si l'invite n'est pas installée, vous devez installer le module GD sur le serveur, par exemple:
sudo apt install php-gd
N'oubliez pas de redémarrer le serveur une fois l'installation terminée.
Le premier paramètre de ImageOpenPolygon () doit être une ressource d'image valide. Voici un exemple standard de création d'une ressource d'image:
<?php
$image = imagecreatetruecolor(400, 300);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
?>
Si $ l'image n'est pas une ressource d'image correctement générée par des fonctions telles que ImageCreateTrueColor () , ImageCreateFromJPEG () , etc., alors ImageOpenPolygon () reviendra directement False .
Le deuxième paramètre de ImageOpenPolygon () doit passer un tableau de coordonnées unidimensionnel dans la forme [x1, y1, x2, y2, x3, y3, ...] . Si le tableau est incorrect, la fonction échouera également.
Exemple d'erreur (tableau bidimensionnel):
$points = [
[10, 10],
[100, 50],
[50, 150]
];
imageopenpolygon($image, $points, 3, $color); // Mauvaise écriture
Exemple correct (tableau unidimensionnel):
$points = [10, 10, 100, 50, 50, 150];
imageopenpolygon($image, $points, 3, $color);
Portez une attention particulière au troisième paramètre, qui représente le nombre de sommets , et non le nombre d'éléments de tableau. Le nombre de sommets doit être (compter ($ points) / 2) .
Lorsque vous dessinez des polygones, vous devez spécifier un indice de couleur, qui est généralement généré par ImageColorAllocate () . Par exemple:
$color = imagecolorallocate($image, 0, 0, 0); // noir
Si vous passez directement la valeur de couleur non initialisée, cela entraînera également l'échec du dessin.
Sur la base des précautions ci-dessus, voici un exemple complet et opérationnel:
<?php
// Créer une image vierge
$image = imagecreatetruecolor(400, 300);
// Attribuer des couleurs
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
// Remplir l'arrière-plan
imagefill($image, 0, 0, $white);
// Définir les sommets
$points = [50, 50, 150, 50, 100, 150];
// Dessiner des polygones ouverts
if (imageopenpolygon($image, $points, 3, $black)) {
echo "Dessiner avec succès!";
} else {
echo "Échec du dessin,Vérifiez, s'il vous plaît参数!";
}
// Image de sortie au navigateur
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>
Si vous souhaitez voir l'effet réel, vous pouvez enregistrer le code ci-dessus en tant que dessin_polygon.php puis accéder à votre serveur, par exemple:
https://m66.net/draw_polygon.php
Assurez-vous que la version PHP prend en charge (l'extension GD dans PHP 7.2+ inclut ImageOpenPolygon () par défaut).
Assurez-vous de définir l'en-tête de type contenu correct avant la sortie de l'image.
Après avoir utilisé des ressources d'image, n'oubliez pas d'utiliser ImageStroy () pour libérer de la mémoire.
Lorsque ImageOpenPolygon () renvoie false , il est généralement causé par des erreurs de réglage des paramètres ou des problèmes de ressources d'image . Après les étapes d'inspection ci-dessus une par une, près de 99% des problèmes peuvent être résolus.