Heim >Backend-Entwicklung >PHP-Tutorial >Warum werden PNG-Bilder mit „imagecreatefrompng()' in PHP schwarz?

Warum werden PNG-Bilder mit „imagecreatefrompng()' in PHP schwarz?

Susan Sarandon
Susan SarandonOriginal
2024-11-03 14:46:30484Durchsuche

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

PNG-Bilder wurden mit imagecreatefrompng() schwarz

Problem:

Benutzer sind auf ein Problem gestoßen Problem, bei dem die PHP-Funktion imagecreatefrompng() transparente Bereiche in PNG-Bildern in einfarbiges Schwarz umwandelt, wenn Miniaturansichten mit der GD-Bibliothek erstellt werden.

PHP-Miniaturansicht-Erstellungscode:

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

Lösung:

Um dieses Problem zu beheben, sind zusätzliche Schritte vor imagecreatetruecolor() erforderlich, insbesondere für PNG- und GIF-Bilder. Diese Schritte umfassen:

<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>

Durch die Implementierung dieser zusätzlichen Schritte bleiben transparente Bereiche in PNG-Bildern erhalten, wenn Miniaturansichten mit imagecreatefrompng() erstellt werden.

Das obige ist der detaillierte Inhalt vonWarum werden PNG-Bilder mit „imagecreatefrompng()' in PHP schwarz?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn