Maison >développement back-end >tutoriel php >Pourquoi imagecreatefrompng() produit-il un fond noir au lieu d'une zone transparente ?

Pourquoi imagecreatefrompng() produit-il un fond noir au lieu d'une zone transparente ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-04 07:49:01446parcourir

Why does imagecreatefrompng() Produce a Black Background Instead of a Transparent Area?

imagecreatefrompng() Produire un fond noir au lieu d'une zone transparente ?

En PHP, la fonction imagecreatefrompng() est couramment utilisée pour travailler avec PNG images. Cependant, il a été observé que lors de l'utilisation de cette fonction, la transparence PNG peut être convertie en une couleur noire unie.

Pour résoudre ce problème, les étapes suivantes peuvent être mises en œuvre après la création d'un nouveau canevas à l'aide de imagecreatetruecolor() :

  1. Attribuer une couleur noire : Attribuez une couleur noire à une variable entière à l'aide de la fonction imagecolorallocate().
  2. Supprimer le noir de la transparence : Utilisez la fonction imagecolortransparent() pour définir le noir comme couleur transparente, le rendant ainsi invisible.
  3. Désactivez le mélange alpha : Utilisez imagealphablending() avec une valeur fausse pour empêcher le canal alpha d'être mélangé aux couleurs de l'image.
  4. Activer la préservation du canal Alpha : Utilisez imagesavealpha() avec une valeur vraie pour conserver toute la plage de transparence.

Par En mettant en œuvre ces modifications, les informations du canal alpha dans l'image PNG seront préservées, empêchant sa conversion en fond noir. Le code mis à jour ressemblerait à ce qui suit :

<code class="php"><?php

// ... Before imagecreatetruecolor()

$dimg = imagecreatetruecolor($width_new, $height_new); // png ?: gif

// start changes
switch ($stype) {

    case 'gif':
    case 'png':
        // integer representation of the color black (rgb: 0,0,0)
        $background = imagecolorallocate($dimg , 0, 0, 0);
        // removing the black from the placeholder
        imagecolortransparent($dimg, $background);

        // turning off alpha blending (to ensure alpha channel information
        // is preserved, rather than removed (blending with the rest of the
        // image in the form of black))
        imagealphablending($dimg, false);

        // turning on alpha channel information saving (to ensure the full range
        // of transparency is preserved)
        imagesavealpha($dimg, true);
        break;

    default:
        break;
}
// end changes

$wm = $w/$nw;
$hm = $h/$nh;

// ...</code>

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