Lorsque vous utilisez la bibliothèque GD de PHP pour le traitement d'image, ImageOpenPolygon () est une fonction relativement rare mais utile pour dessiner un chemin de polygone ouvert (non fermé). Cependant, dans un traitement d'image complexe, nous devons souvent vérifier si ce processus de dessin est réussi. Une méthode intuitive et efficace consiste à juger si le dessin est terminé.
Cet article introduira en détail comment utiliser les changements de couleur pour détecter les résultats dessinés par imageOpenPolygon () .
L'utilisation de base de la fonction ImageOpenPolygon () est la suivante:
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 contenant des sommets au format [x0, y0, x1, y1, x2, y2, ...] .
$ num_points : le nombre de sommets.
$ couleur : l'identifiant de couleur utilisé pour tracer des lignes de polygone.
Habituellement, ImageOpenPolygon () renvoie vrai pour indiquer un dessin réussi, mais dans des applications complexes pratiques, toutes les erreurs détaillées peuvent ne pas être capturées en fonction de la valeur de retour seule, telle que:
La ressource d'image a été détruite mais la fonction renvoie toujours vrai .
La couleur spécifiée n'est pas visible en arrière-plan de l'image.
Par conséquent, la détection directe des changements de couleur à des positions spécifiques sur l'image peut confirmer plus intuitivement l'effet de dessin.
Tout d'abord, créez une image avec un fond blanc:
<?php
// Créer une image vierge
$image = imagecreatetruecolor(200, 200);
// Allocation fond blanc
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
?>
Définissez les points et les couleurs d'un polygone:
<?php
// Définissez les sommets d'un polygone
$points = [
50, 50,
150, 50,
100, 150
];
// Affecter le rouge pour le dessin
$red = imagecolorallocate($image, 255, 0, 0);
?>
Avant de dessiner, nous sélectionnons un point sur un segment de ligne qui devrait être dessiné et enregistrer sa couleur actuelle:
<?php
// Sélectionnez un point près de la ligne polygone
$x = 100;
$y = 50;
// Enregistrez la couleur avant de dessiner
$beforeColor = imagecolorat($image, $x, $y);
?>
<?php
// Dessiner des polygones ouverts
$result = imageopenpolygon($image, $points, 3, $red);
?>
<?php
// Enregistrez la couleur après le dessin
$afterColor = imagecolorat($image, $x, $y);
// Vérifiez si la couleur change
if ($beforeColor !== $afterColor && $result) {
echo "Dessiner avec succès,Changements de couleur。";
} else {
echo "Échec du dessin ou de la couleur n'a pas changé。";
}
?>
En comparant $ beforecolor et $ aprèscolor , nous pouvons déterminer de manière fiable si l'opération de dessin est réellement efficace sur l'image.
<?php
// Image de sortie
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>
Si vous souhaitez enregistrer l'image, vous pouvez également l'enregistrer sur votre local ou serveur en utilisant la méthode suivante, par exemple pour l'enregistrer sur https://m66.net/uploads/test.png :
<?php
// Enregistrez l'image sur le serveur
imagepng($image, '/var/www/m66.net/uploads/test.png');
imagedestroy($image);
?>
Les points de test sélectionnés avant et après le dessin doivent être allumés ou très proches du bord du polygone , sinon la couleur peut ne pas changer.
ImageOpenPolygon () ne fermera pas automatiquement le chemin (c'est-à-dire, ne connectez pas le dernier point au premier point). Si un effet de clôture est requis, veuillez ajouter manuellement le point de départ comme point final.
Lorsque l'arrière-plan de l'image est similaire à la couleur de la ligne, vous devez sélectionner soigneusement les points de test pour éviter une erreur de jugement.
En détectant les changements de couleur, il peut non seulement vérifier si ImageOpenPolygon () est exécuté avec succès, mais aussi vérifier indirectement la position de dessin et l'exactitude des couleurs. Cette méthode convient à la vérification automatisée dans des scénarios de génération d'images ou de traitement par lots complexes afin d'éviter l'inefficacité et l'erreur causées par l'inspection des yeux nus.
J'espère que ce tutoriel peut vous aider à mieux maîtriser les compétences de dessin et de détection dans la bibliothèque PHP GD!