Start · Sprachen · PHP · Referenz · imagesavealpha

imagesavealpha

Funktion

Legt fest, ob beim Speichern eines GD-Bildes vollständige Alphakanal-Informationen erhalten bleiben.

seit PHP 4.3.2 Kategorie: image

Signatur

imagesavealpha(GdImage $image, bool $enable): bool

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

Typ
bool
Beschreibung
Gibt 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-Bild mit transparentem Hintergrund und halb-transparentem rotem Kreis)

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.';
?>
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.