Maison >développement back-end >tutoriel php >Pourquoi les vignettes PNG perdent-elles leur transparence lors de l'utilisation de imagecreatefrompng() ?

Pourquoi les vignettes PNG perdent-elles leur transparence lors de l'utilisation de imagecreatefrompng() ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-04 11:33:30702parcourir

Why Do PNG Thumbnails Lose Transparency When Using imagecreatefrompng()?

Perte de transparence PNG dans les vignettes d'image

Lors de la création de vignettes avec la bibliothèque GD à l'aide de la fonction imagecreatefrompng(), les utilisateurs ont rencontré un problème où l'arrière-plan transparent du PNG est remplacé par une couleur noire unie. Pour résoudre ce problème, examinons le code et identifions une solution.

Le code fourni redimensionne efficacement une image et l'enregistre au format JPEG. Cependant, le problème réside dans l'initialisation de l'image de destination ($dimg) à l'aide de la fonction imagecreatetruecolor(). Pour préserver la transparence des images PNG, des étapes supplémentaires sont nécessaires. Voici une version modifiée du code :

<code class="php">$dimg = imagecreatetruecolor($width_new, $height_new);

// Start changes for PNG transparency
switch ($stype) {

    case 'gif':
    case 'png':
        // Define black as a color
        $background = imagecolorallocate($dimg, 0, 0, 0);
        // Make black transparent
        imagecolortransparent($dimg, $background);
        // Disable blending to avoid mixing black with the image
        imagealphablending($dimg, false);
        // Enable alpha channel preservation
        imagesavealpha($dimg, true);
        break;

    default:
        break;
}
// End changes

$wm = $w/$nw;
$hm = $h/$nh;</code>

En ajoutant ces étapes, nous nous assurons que :

  • Une couleur de fond transparente est définie.
  • Le transparent la couleur est supprimée de l'image de destination.
  • La fusion alpha est désactivée pour empêcher la couleur transparente de se mélanger à l'image.
  • Les informations du canal alpha sont préservées, maintenant la transparence dans la vignette résultante.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn