Maison  >  Article  >  développement back-end  >  Pourquoi les images PNG deviennent-elles noires avec `imagecreatefrompng()` en PHP ?

Pourquoi les images PNG deviennent-elles noires avec `imagecreatefrompng()` en PHP ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-03 14:46:30441parcourir

Why are PNG images turning black with `imagecreatefrompng()` in PHP?

Les images PNG sont devenues noires avec imagecreatefrompng()

Problème :

Les utilisateurs ont rencontré un problème où la fonction imagecreatefrompng() de PHP convertit les zones transparentes des images PNG en noir uni lors de la création de vignettes à l'aide de la bibliothèque GD.

Code de création de vignettes PHP :

<code class="php">function cropImage($nw, $nh, $source, $stype, $dest) {
  // ...
  switch($stype) {
    case 'png':
      $simg = imagecreatefrompng($source);
      break;
    // ...
  }
  // ...
}</code>

Solution :

Pour résoudre ce problème, des étapes supplémentaires avant imagecreatetruecolor() sont requises, en particulier pour les images PNG et GIF. Ces étapes impliquent :

<code class="php">// Before imagecreatetruecolor()

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

// Additional steps for PNG and GIF

switch ($stype) {

    case 'gif':
    case 'png':
        // Black color
        $background = imagecolorallocate($dimg , 0, 0, 0);
        // Remove black from placeholder
        imagecolortransparent($dimg, $background);
        // Turn off alpha blending
        imagealphablending($dimg, false);
        // Turn on alpha channel saving
        imagesavealpha($dimg, true);
        break;

    default:
        break;
}</code>

En mettant en œuvre ces étapes supplémentaires, les zones transparentes dans les images PNG seront préservées lors de la création de vignettes à l'aide de imagecreatefrompng().

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