Lors du dessin de graphiques à l'aide de la bibliothèque GD de PHP, les développeurs doivent parfois dessiner des polygones sur les images. Traditionnellement, la fonction ImageOpenPolygon () peut dessiner un contour de polygone creux. Mais parfois, nous voulons utiliser ImageFildPolygon () pour obtenir des effets de dessin plus flexibles, surtout lorsque nous devons faire face aux remplissages de couleurs et à des styles de contour. Cet article présentera comment utiliser ImageFildPolygon () au lieu de ImageOpenPolygon () et résoudre le problème du dessin de polygones creux.
ImageOpenPolygon () est principalement utilisé pour dessiner des polygones creux, et son effet n'est que des accidents vasculaires cérébraux et sans remplissage interne. ImageFildPolygon () peut dessiner directement un polygone rempli.
Si vous souhaitez dessiner des polygones avec des couleurs de bordure spécifiques ou des commandes plus complexes, ImageFildPolygon () est plus flexible. Surtout lorsque ImageOpenPolygon () ne prend pas en charge les exigences de dessin plus diverses, l'utilisation d'ImageFildPolygon () pour simuler le dessin de contour par vous-même sera une bonne alternative.
L'idée de base est:
Utilisez ImageFildPolygon () pour dessiner un polygone rempli (remplir d'arrière-plan ou de couleur transparente).
Utilisez Imageline () pour dessiner la bordure d'un polygone séparément.
Cela vous permet de contrôler manuellement la couleur de remplissage et la couleur de la bordure pour obtenir l'effet de polygone creux souhaité.
Vous trouverez ci-dessous un exemple complet montrant comment utiliser ImageFildPolygon () pour obtenir un effet similaire à ImageOpenPolygon () .
<?php
// Créer une toile
$image = imagecreatetruecolor(300, 300);
// Attribuer des couleurs
$white = imagecolorallocate($image, 255, 255, 255);
$borderColor = imagecolorallocate($image, 0, 0, 0);
// Remplir l'arrière-plan
imagefill($image, 0, 0, $white);
// Définissez le point d'un polygone
$points = [
50, 50,
250, 70,
200, 200,
100, 250,
60, 150
];
// Remplir les polygones(Utiliser la couleur d'arrière-plan,Gardez l'intérieur transparent ou la même couleur)
imagefilledpolygon($image, $points, count($points) / 2, $white);
// Dessiner les bordures des polygones
$num_points = count($points) / 2;
for ($i = 0; $i < $num_points; $i++) {
$x1 = $points[$i * 2];
$y1 = $points[$i * 2 + 1];
$x2 = $points[(($i + 1) % $num_points) * 2];
$y2 = $points[(($i + 1) % $num_points) * 2 + 1];
imageline($image, $x1, $y1, $x2, $y2, $borderColor);
}
// Image de sortie
header('Content-Type: image/png');
imagepng($image);
// Libérer les ressources
imagedestroy($image);
?>
ImageFildPolygon () remplit de couleur d'arrière-plan pour empêcher la zone interne de décolorer.
Utilisez la boucle Imageline () pour connecter manuellement chaque sommet pour dessiner la bordure extérieure du polygone.
($ i + 1)% $ num_points garantit que le dernier point peut être connecté au premier point.
Si vous souhaitez la transparence interne, vous pouvez définir un arrière-plan transparent à l'aide d'imagesVealpha () et ImageColorAllocatEalPha () après avoir créé le canevas.
Si l'arrière-plan n'est pas une couleur unie, vous pouvez ajuster la couleur de remplissage de ImageFildPolygon () de manière appropriée, ou ne pas remplir directement, et dessiner le contour uniquement par Imageline () .