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.
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?
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:
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.
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.
<?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.
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 .