Dans PHP, lorsque vous utilisez la bibliothèque GD pour traiter les images, nous pouvons rencontrer un problème: lors de l'appel de la fonction ImageColorAllocatEalpha pour définir l'arrière-plan de l'image transparent, après avoir enregistré l'image à l'aide d'imagepng () , l'arrière-plan de l'image devient noir. Cette question confond souvent les développeurs, en particulier lorsqu'ils traitent des images PNG avec des arrière-plans transparents. Cet article expliquera en détail pourquoi cela se produit et donnera une solution.
La bibliothèque GD est une bibliothèque standard pour le traitement d'image en PHP. Il prend en charge la génération et la modification d'une variété de formats d'image, y compris JPEG, PNG, GIF, etc. Pour générer des images PNG avec transparence, les développeurs utilisent généralement l'imageColorallocatealpha pour attribuer une couleur transparente à l'image. Cependant, bien que nous nous attendions à ce que l'arrière-plan de l'image soit transparent, les images PNG exportées via ImagePng () ont souvent un fond noir.
La cause profonde du problème réside dans la façon dont la bibliothèque GD et le format PNG sont traités. Le format PNG prend en charge la transparence et la mise en œuvre de la transparence est obtenue par un mécanisme appelé canal alpha. La fonction ImageColorallocatEalpha nous permet de spécifier une valeur de transparence qui contrôle le degré de transparence de la couleur. La valeur de la transparence est généralement comprise entre 0 et 127, avec 0 représentant l'opaque total et 127 représentant une transparence complète.
Cependant, la bibliothèque GD ne définit pas automatiquement l'arrière-plan transparent de l'image PNG. Lors de l'enregistrement des images PNG, la fonction ImagePng () n'attire pas la prise en charge de l'arrière-plan transparente par défaut. Ainsi, même si nous utilisons des couleurs transparentes, si l'arrière-plan transparent de l'image n'est pas configuré correctement, l'image PNG générée aura un fond noir.
Pour résoudre ce problème, nous devons nous assurer que l'arrière-plan transparent est activé lors de la génération d'images PNG. Les options de sauvegarde d'image peuvent être contrôlées via le troisième paramètre de la fonction ImagePng () , et les fonctions ImageAlPhableEnding () et imagesVealpha () doivent être utilisées pour définir le traitement de transparence de l'image.
Voici un exemple de code pour une solution:
<?php
// Créer une vraie image couleur
$image = imagecreatetruecolor(200, 200);
// Attribuer une couleur transparente
$transparent = imagecolorallocatealpha($image, 0, 0, 0, 127);
// Remplissez l'arrière-plan de transparent
imagefill($image, 0, 0, $transparent);
// Ouvriralpha blending
imagealphablending($image, false);
// Enregistrer les informations de transparence
imagesavealpha($image, true);
// Dessiner des graphiques,Comme un rectangle rouge
$red = imagecolorallocate($image, 255, 0, 0);
imagefilledrectangle($image, 50, 50, 150, 150, $red);
// La sortie estPNGFormat
imagepng($image, 'output.png');
// Détruiser les ressources d'image
imagedestroy($image);
?>
Créez une image : utilisez la fonction ImageCreateTrueColor () pour créer une véritable image couleur de 200x200.
Attribuez des couleurs transparentes : ImageColorAllocatEalpha () attribue une couleur avec transparence. Dans cet exemple, la transparence est de 127, c'est-à-dire qu'elle est complètement transparente.
Arrière-plan de remplissage : La fonction ImageFill () remplit l'arrière-plan de l'image avec des couleurs transparentes.
Allumez le mélange alpha : la fonction ImageAlPhableEnding () est définie sur False , ce qui signifie que le mélange alpha est désactivé afin que les pixels transparents soient enregistrés correctement.
Enregistrer les informations de transparence : la fonction ImagesVealpha () garantit que les informations de transparence seront enregistrées dans le fichier PNG.
Dessinez un graphique : dessinez un rectangle rouge pour afficher le contenu de l'image.
Enregistrez l'image : utilisez ImagePng () pour enregistrer l'image au format PNG.
De cette façon, nous nous assurons que l'arrière-plan de l'image est transparent, plutôt que l'arrière-plan noir par défaut.
Lorsque vous utilisez la fonction ImageColorAllocatEalpha , l'arrière-plan de l'image exporté par imagepng () peut devenir noir si le traitement de transparence de l'image n'est pas réglé correctement. Pour résoudre ce problème, nous devons activer le mélange alpha et nous assurer que les informations de transparence sont enregistrées. En configurant correctement ces paramètres, l'image PNG générée conservera un arrière-plan transparent.
J'espère que cet article peut vous aider à résoudre le problème et à traiter avec succès des images PNG avec un arrière-plan transparent.