En PHP, redimensionner des images PNG avec un arrière-plan transparent peut être un défi. Pour résoudre ce problème, un exemple de code qui s'est avéré inefficace nécessite quelques modifications cruciales pour obtenir le résultat souhaité. Voici une explication détaillée de ce qui doit être ajusté :
Le code fourni :
$this->image = imagecreatefrompng($filename); imagesavealpha($this->image, true); $newImage = imagecreatetruecolor($width, $height); // Make a new transparent image and turn off alpha blending to keep the alpha channel $background = imagecolorallocatealpha($newImage, 255, 255, 255, 127); imagecolortransparent($newImage, $background); imagealphablending($newImage, false); imagesavealpha($newImage, true); imagecopyresampled($newImage, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight()); $this->image = $newImage; imagepng($this->image,$filename);
Après avoir soigneusement examiné ce code, il est devenu évident que le problème réside dans l'instruction où imagecolorallocatealpha() est appelé. Le bon ordre des opérations est essentiel ici : vous devez d'abord définir le mode de fusion sur false et l'indicateur de canal alpha de sauvegarde sur true avant d'exécuter imagecolorallocatealpha().
imagesavealpha($newImg, true); imagealphablending($newImg, false);
Après avoir effectué cela modification, votre code devrait pouvoir redimensionner avec succès les images PNG avec un arrière-plan transparent, empêchant l'arrière-plan de devenir noir.
Mise à jour pour les images avec une opacité comprise entre 0 et 100 :
Le code fourni ne fonctionne que pour les images dont l'opacité est définie sur 0. Si votre image a une opacité comprise entre 0 et 100, l'arrière-plan apparaîtra noir. Pour résoudre ce problème, vous devrez ajuster la fonction imagecopyresampled() pour utiliser imagecopyresampled() à la place, car elle gère mieux les images PNG transparentes avec différents niveaux d'opacité.
$transparent = imagecolorallocatealpha($newImg, 255, 255, 255, 127); imagefilledrectangle($newImg, 0, 0, $newWidth, $newHeight, $transparent); imagecopyresampled($newImg, $image, 0, 0, 0, 0, $newWidth, $newHeight, $src_w, $src_h);
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!