Aktueller Standort: Startseite> Neueste Artikel> Gründe für PNG -Sparen der Opazität nach der Verwendung von ImageColorallocatealpha ()

Gründe für PNG -Sparen der Opazität nach der Verwendung von ImageColorallocatealpha ()

M66 2025-05-31

Bei Verwendung der GD -Bibliothek von PHP zum Verarbeiten von Bildern begegnen viele Entwickler einer solchen Verwirrung:

"Ich habe eindeutig eine transparente Farbe mit ImageColorallocatealpha () festgelegt, warum wird die letzte PNG -Datei vollständig undurchsichtig gespeichert?"

Lassen Sie uns dieses Problem sorgfältig analysieren und die richtige Lösung finden.

Das Problem erscheint wieder

Angenommen, Sie haben einen solchen Code geschrieben:

 <?php
$width = 200;
$height = 100;

// Erstellen Sie ein echtes Farbbild
$image = imagecreatetruecolor($width, $height);

// Weisen Sie eine Farbe mit Transparenz zu
// Parameterreihenfolge:R, G, B, Alpha(0 Total undurchsichtig,127 Völlig transparent)
$transparentColor = imagecolorallocatealpha($image, 255, 0, 0, 127);

// Füllen Sie den Hintergrund mit dieser Farbe aus
imagefill($image, 0, 0, $transparentColor);

// Sparen as PNG
imagepng($image, 'output.png');

// Ressourcen zerstören
imagedestroy($image);
?>

Sie erwarten, ein völlig transparentes PNG -Bild auf einem roten Hintergrund zu generieren. Nach dem Öffnen der Datei stellen Sie jedoch fest, dass der Hintergrund rot undurchsichtig ist.

Warum?

Kerngrund: Fehlender Alpha -Kanal aktiviert speichern

Der ImageColorallocatealpha () der GD -Bibliothek wird gerade eine Farbe zugewiesen, die die Alpha -Informationen enthält. Dies bedeutet jedoch nicht, dass GD beim Speichern der PNG -Datei den Alpha -Kanal automatisch beibehält.

Um die Transparenzinformationen ordnungsgemäß in PNG gespeichert zu machen, müssen Sie zwei Dinge explizit aktivieren:

  1. Schalten Sie den Alpha -Kanal ein, um <br> zu speichern Verwenden Sie ImagesAvealpha ($ image, true) , um die GD -Bibliothek bei der Speichern von PNG einen Alpha -Kanal einzuschließen.

  2. Schalten Sie den Alpha -Mix aus (optional, aber empfohlen)
    Verwenden Sie ImagealPhableending ($ image, false), um sicherzustellen, dass Sie Farben bei der Manipulation von Bildpixeln nicht falsch mischen.

Überarbeiteter Code

 <?php
$width = 200;
$height = 100;

// Erstellen Sie ein echtes Farbbild
$image = imagecreatetruecolor($width, $height);

// Schließung alpha mischen(Um transparentem Hintergrund richtig zu sparen)
imagealphablending($image, false);

// Speichern aktivieren alpha Kanalinformationen
imagesavealpha($image, true);

// 分配一个Völlig transparent的红色
$transparentColor = imagecolorallocatealpha($image, 255, 0, 0, 127);

// Füllen Sie den Hintergrund mit dieser Farbe aus
imagefill($image, 0, 0, $transparentColor);

// Sparen as PNG
imagepng($image, 'output.png');

// Oder auf der Webseite speichern, um direkt auszugeben
// header('Content-Type: image/png');
// imagepng($image);

// Ressourcen zerstören
imagedestroy($image);
?>

Dieser Code generiert ein PNG -Bild mit einem transparenten roten Hintergrund.

Zusammenfassung

Wenn Sie transparente Farbe mit ImageColorallocatealpha () in PHP festlegen, aber der gespeicherte PNG ist undurchsichtig, liegt dies normalerweise daran, dass Sie vergessen haben:

? Verwenden Sie birealPhableDing ($ image, false)
? Verwenden Sie ImagesAvealpha ($ image, true)

Diese beiden Schritte sind der Schlüssel zur transparenten PNG -Erhaltung.

Wenn Sie das Bild auf eine Website hochladen, wie z .