Signatur
Beschreibung
imagesavealpha() steuert, ob der vollständige Alphakanal eines True-Color-Bildes beim Speichern (z. B. als PNG) beibehalten wird. Ist diese Option aktiviert, werden alle 256 Transparenzstufen pro Pixel gespeichert, anstatt nur eine einfache binäre Transparenz zu verwenden.
Die Funktion ist besonders wichtig beim Erstellen von PNG-Bildern mit weichen Transparenzverläufen (z. B. Schatten, abgerundete Ecken), da PNG der einzige von GD unterstützte Format ist, der einen vollständigen Alphakanal speichern kann. Ohne imagesavealpha($im, true) würde der Alphakanal beim Speichern verworfen.
Wichtig: Damit imagesavealpha korrekt funktioniert, muss zusätzlich imagealphablending($image, false) aufgerufen werden, da sonst die Alphablending-Funktion des GD-Renderers den Alphakanal vor dem Speichern auflöst.
- Nur wirksam für True-Color-Bilder (erzeugt z. B. mit
imagecreatetruecolor()). - Nur relevant für das PNG-Format; JPEG und GIF ignorieren den Alphakanal.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $image Pflicht | GdImage | Das GD-Bildobjekt, auf das die Einstellung angewendet wird. Muss ein True-Color-Bild sein. | |
| $enable Pflicht | bool | true aktiviert das Speichern des vollständigen Alphakanals; false deaktiviert es. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. wenn kein gültiges Bildobjekt übergeben wurde).Beispiele
PNG mit vollständigem Alphakanal erzeugen
<?php
// True-Color-Bild erstellen
$im = imagecreatetruecolor(200, 200);
// Alphablending deaktivieren (notwendig für imagesavealpha)
imagealphablending($im, false);
// Alphakanal beim Speichern erhalten
imagesavealpha($im, true);
// Vollständig transparenten Hintergrund füllen
$transparent = imagecolorallocatealpha($im, 0, 0, 0, 127);
imagefill($im, 0, 0, $transparent);
// Einen halb-transparenten roten Kreis zeichnen
$red = imagecolorallocatealpha($im, 255, 0, 0, 64);
imagefilledellipse($im, 100, 100, 150, 150, $red);
// Als PNG mit Alphakanal ausgeben
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>
PNG-Datei mit Transparenz auf Festplatte speichern
<?php
$im = imagecreatetruecolor(100, 100);
imagealphablending($im, false);
imagesavealpha($im, true);
// Hintergrund vollständig transparent setzen
$transparent = imagecolorallocatealpha($im, 0, 0, 0, 127);
imagefill($im, 0, 0, $transparent);
// Weißen Text mit leichter Transparenz hinzufügen
$white = imagecolorallocatealpha($im, 255, 255, 255, 40);
imagestring($im, 5, 10, 40, 'Hallo!', $white);
// Datei speichern
imagepng($im, '/tmp/ausgabe_alpha.png');
imagedestroy($im);
echo 'Bild mit Alphakanal gespeichert.';
?>
// Wichtig · Fallstricke
Achtung: imagesavealpha() muss immer zusammen mit imagealphablending($image, false) verwendet werden. Wird Alphablending nicht deaktiviert, berechnet GD die Transparenz bereits beim Zeichnen und der Alphakanal geht beim Speichern verloren.
Diese Funktion hat keinen Effekt auf das JPEG-Format, da JPEG keine Transparenz unterstützt. Für GIF-Bilder steht nur binäre Transparenz (ein Farbindex) zur Verfügung; imagesavealpha ist hier ebenfalls wirkungslos.
Ab PHP 8.0 wird der Parameter image als GdImage-Objekt erwartet; in älteren PHP-Versionen war es eine Ressource.