Lors du dessin avec la bibliothèque GD dans PHP, vous devez généralement utiliser un canal alpha pour le gérer en conjonction avec le canal alpha. Dans cet article, je vais vous guider à travers comment dessiner un effet de polygone lisse et translucide à travers la fonction ImageOpenPolygon () avec un gradient alpha.
ImageOpenPolygon () est une fonction de dessin dans la bibliothèque PHP GD qui est utilisée pour dessiner des polygones ouverts sur la toile. Contrairement à ImagePolygon () (Closeing Polygon), ImageOpenPolygon () ne dessine que les lignes du polygone et ne ferme automatiquement pas les points de début et d'extrémité.
La syntaxe de base de la fonction est la suivante:
bool imageopenpolygon(GdImage $image, array $points, int $num_points, int $color)
$ Image : Ressource d'image cible.
$ Points : un tableau contenant des coordonnées de points, au format [x1, y1, x2, y2, ..., xn, yn] .
$ num_points : le nombre de points.
$ couleur : la couleur utilisée pour le dessin.
La bibliothèque GD prend en charge les couleurs du format RGBA, permettant aux couleurs d'avoir la transparence (alpha). En contrôlant la valeur alpha, l'effet transparent du gradient peut être atteint.
Voici un exemple pratique qui montre comment dessiner un polygone avec un gradient semi-transparent en utilisant ImageOpenPolygon () .
<?php
// Créer une toile
$width = 400;
$height = 400;
$image = imagecreatetruecolor($width, $height);
// Activer alpha Informations sur la sauvegarde des canaux
imagesavealpha($image, true);
// Remplissez l'arrière-plan de couleurs transparentes
$transparent = imagecolorallocatealpha($image, 0, 0, 0, 127);
imagefill($image, 0, 0, $transparent);
// Définissez le point d'un polygone
$points = [
50, 50,
350, 50,
350, 350,
50, 350
];
// Commencez à dessiner des lignes de polygone avec une transparence différente
$steps = 10;
for ($i = 0; $i <= $steps; $i++) {
$alpha = (int)($i * (127 / $steps)); // alpha depuis0(opaque)arriver127(Entièrement transparent)
$color = imagecolorallocatealpha($image, 255, 0, 0, $alpha); // rouge,Avec une transparence différente
// Calculez le point d'échelle
$scaledPoints = [];
foreach ($points as $index => $coord) {
$offset = 5 * $i;
if ($index % 2 == 0) { // x coordonner
$scaledPoints[] = $coord + $offset;
} else { // y coordonner
$scaledPoints[] = $coord + $offset;
}
}
imageopenpolygon($image, $scaledPoints, count($scaledPoints) / 2, $color);
}
// Image de sortie
header('Content-Type: image/png');
imagepng($image);
// Détruire les ressources
imagedestroy($image);
?>
Ce code boucle à travers une boucle, élargissant légèrement le polygone et réduisant la transparence à la fois, atteignant ainsi un gradient semi-transparent qui diverge du centre à l'extérieur. Étant donné que ImageOpenPolygon () dessine un polygone ouvert, il n'y aura pas de remplissage solide au milieu, en maintenant une sensation de ligne de gradient très délicate.
Si vous souhaitez voir l'effet final, vous pouvez enregistrer le code ci-dessus en tant que fichier .php et le télécharger sur votre serveur, par exemple:
https://m66.net/demo/transparent_polygon.php
(N'oubliez pas de configurer le serveur avec un environnement PHP et assurez-vous que la bibliothèque GD est activée.)
ImagesVealpha ($ Image, True) doit être appelé, sinon les informations transparentes ne seront pas enregistrées lors de la sortie.
Le dernier paramètre de l'imageColorallocatealpha () est la valeur alpha, allant de 0 (complètement opaque) à 127 (complètement transparent).
À partir de PHP 8.0, le modèle d'objet de la bibliothèque GD a été modifié, alors faites attention aux différences de version.
L'utilisation d'imageOpenPolygon () avec un gradient alpha peut réellement atteindre des effets de dessin de ligne translucides et à plusieurs niveaux très facilement. Cette technologie peut non seulement être utilisée pour dessiner des composants d'interface utilisateur sympas, mais aussi pour générer des arrière-plans dynamiques, des graphiques d'effets spéciaux, etc., ce qui est très pratique.