Heim  >  Artikel  >  Backend-Entwicklung  >  Warum erzeugt imagecreatefrompng() einen schwarzen Hintergrund anstelle eines transparenten Bereichs?

Warum erzeugt imagecreatefrompng() einen schwarzen Hintergrund anstelle eines transparenten Bereichs?

Barbara Streisand
Barbara StreisandOriginal
2024-11-04 07:49:01385Durchsuche

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

imagecreatefrompng() Erzeugt schwarzen Hintergrund anstelle eines transparenten Bereichs?

In PHP wird die Funktion imagecreatefrompng() häufig für die Arbeit mit PNG verwendet Bilder. Es wurde jedoch beobachtet, dass bei Verwendung dieser Funktion die PNG-Transparenz möglicherweise in eine durchgehende schwarze Farbe umgewandelt wird.

Um dieses Problem zu beheben, können die folgenden Schritte ausgeführt werden, nachdem mit imagecreatetruecolor() eine neue Leinwand erstellt wurde:

  1. Eine schwarze Farbe zuweisen: Mit der Funktion imagecolorallocate() einer Ganzzahlvariablen eine schwarze Farbe zuweisen.
  2. Schwarz aus der Transparenz entfernen: Verwenden Sie die Funktion imagecolortransparent(), um Schwarz als transparente Farbe festzulegen und sie so effektiv unsichtbar zu machen.
  3. Alpha-Blending deaktivieren: Verwenden Sie imagealphablending() mit einem falschen Wert, um den Alpha-Kanal zu verhindern nicht in die Farben des Bildes eingemischt werden.
  4. Alpha-Kanal-Erhaltung aktivieren:Verwenden Sie imagesavealpha() mit einem wahren Wert, um den vollen Transparenzbereich beizubehalten.

Von Bei der Umsetzung dieser Änderungen bleiben die Alphakanalinformationen im PNG-Bild erhalten und verhindern so die Konvertierung in einen schwarzen Hintergrund. Der aktualisierte Code würde wie folgt aussehen:

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

Das obige ist der detaillierte Inhalt vonWarum erzeugt imagecreatefrompng() einen schwarzen Hintergrund anstelle eines transparenten Bereichs?. 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