Maison > Article > développement back-end > Comment puis-je préserver la transparence lors du redimensionnement des fichiers PNG en PHP ?
Préserver la transparence lors du redimensionnement des fichiers PNG en PHP
Lors du redimensionnement d'images PNG avec un arrière-plan transparent en PHP, il est crucial de s'assurer que la transparence est maintenu. Cependant, de nombreux exemples de code en ligne ne parviennent pas à y parvenir correctement, ce qui entraîne un arrière-plan noir après le redimensionnement.
Pour résoudre ce problème, il est nécessaire d'apporter des ajustements spécifiques au code. Avant d'exécuter la fonction imagecolorallocatealpha(), il est essentiel de configurer à la fois le mode de fusion et l'indicateur de canal alpha de sauvegarde sur false et true, respectivement.
Voici un extrait de code mis à jour qui intègre ces ajustements :
<?php /** * https://stackoverflow.com/a/279310/470749 * * @param resource $image * @param int $newWidth * @param int $newHeight * @return resource */ public function getImageResized($image, int $newWidth, int $newHeight) { $newImg = imagecreatetruecolor($newWidth, $newHeight); imagealphablending($newImg, false); // Turn off blending imagesavealpha($newImg, true); // Turn on save alpha channel $transparent = imagecolorallocatealpha($newImg, 255, 255, 255, 127); imagefilledrectangle($newImg, 0, 0, $newWidth, $newHeight, $transparent); $src_w = imagesx($image); $src_h = imagesy($image); imagecopyresampled($newImg, $image, 0, 0, 0, 0, $newWidth, $newHeight, $src_w, $src_h); return $newImg; } ?>
Avec ces modifications, le code devrait effectivement maintenir la transparence des images PNG après redimensionnement.
Remarque : Ce code mis à jour ne fonctionne correctement que pour les images avec une opacité d'arrière-plan de 0. Si l'opacité de l'image est comprise entre 0 et 100, l'arrière-plan apparaîtra noir après le redimensionnement.
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!