Start · Sprachen · PHP · Referenz · imagecolorallocatealpha

imagecolorallocatealpha

Funktion

Reserviert eine Farbe mit Alphakanal (Transparenz) für ein GD-Bild und gibt den zugehörigen Farbindex zurück.

seit PHP 4.3.2 Kategorie: image

Signatur

imagecolorallocatealpha(GdImage $image, int $red, int $green, int $blue, int $alpha): int|false

Beschreibung

imagecolorallocatealpha() funktioniert wie imagecolorallocate(), erlaubt aber zusätzlich die Angabe eines Transparenzwerts über den Parameter alpha. Die Funktion registriert die Farbe in der Farbpalette des Bildes und gibt einen Integer-Index zurück, der für spätere Zeichenoperationen verwendet werden kann.

Der Alphakanal wird als Wert zwischen 0 (vollständig opak) und 127 (vollständig transparent) angegeben – Achtung: dies ist umgekehrt zur üblichen Konvention (z. B. CSS), wo 0 transparent und 255 vollständig sichtbar bedeutet. Diese Funktion ist besonders nützlich, wenn Bilder mit Transparenzeffekten, Überlagerungen oder PNG-Ausgaben mit Alphakanal erzeugt werden sollen.

Für True-Color-Bilder (erzeugt mit imagecreatetruecolor()) sind unbegrenzt viele Farben verfügbar; bei Palette-Bildern (imagecreate()) ist die Anzahl auf 255 Einträge begrenzt. Um Transparenz bei der Ausgabe zu erhalten, muss außerdem imagesavealpha() auf true gesetzt werden.

Schlägt die Farbzuweisung fehl (z. B. weil die Palette voll ist), gibt die Funktion false zurück. Es empfiehlt sich daher, den Rückgabewert zu prüfen.

Parameter

Name Typ Default Beschreibung
$image Pflicht GdImage Ein GD-Bildobjekt, das z. B. durch imagecreatetruecolor() oder imagecreate() erzeugt wurde.
$red Pflicht int Rotwert der Farbe im Bereich 0255.
$green Pflicht int Grünwert der Farbe im Bereich 0255.
$blue Pflicht int Blauwert der Farbe im Bereich 0255.
$alpha Pflicht int Transparenzwert im Bereich 0 (vollständig opak) bis 127 (vollständig transparent). Achtung: Die Skala ist umgekehrt zur CSS-Konvention.

Rückgabewert

Typ
int|false
Beschreibung
Gibt den Integer-Farbindex zurück, der für Zeichenoperationen genutzt werden kann. Gibt false zurück, wenn die Farbzuweisung fehlgeschlagen ist (z. B. volle Palette bei einem Palette-Bild).

Beispiele

Halbtransparentes rotes Rechteck auf einem PNG-Bild

<?php
// True-Color-Bild erstellen
$image = imagecreatetruecolor(200, 200);

// Alphakanal-Speicherung aktivieren
imagesavealpha($image, true);

// Vollständig transparenten Hintergrund erstellen
$transparent = imagecolorallocatealpha($image, 0, 0, 0, 127);
imagefill($image, 0, 0, $transparent);

// Halbtransparentes Rot (alpha = 63 = ~50 % transparent)
$semiRed = imagecolorallocatealpha($image, 255, 0, 0, 63);

// Gefülltes Rechteck zeichnen
imagefilledrectangle($image, 20, 20, 180, 180, $semiRed);

// Als PNG ausgeben
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);

Text mit Transparenz über ein vorhandenes Bild legen

<?php
// Basis-Bild laden
$image = imagecreatefrompng('hintergrund.png');

// Alphakanal-Speicherung aktivieren
imagesavealpha($image, true);

// Halbtransparentes Weiß für Wasserzeichen-Text
$weissTransp = imagecolorallocatealpha($image, 255, 255, 255, 80);

if ($weissTransp === false) {
    die('Farbe konnte nicht reserviert werden.');
}

// Text mit GD-Standardfont schreiben
imagestring($image, 5, 10, 10, 'Wasserzeichen', $weissTransp);

// Bild speichern
imagepng($image, 'ausgabe.png');
imagedestroy($image);

echo 'Wasserzeichen-Bild gespeichert.';
Wasserzeichen-Bild gespeichert.

// Wichtig · Fallstricke

Achtung: Alphakanal-Skala – Der alpha-Parameter verwendet nicht die übliche 0–255-Skala, sondern reicht von 0 (opak) bis 127 (transparent). Dies unterscheidet sich von CSS (rgba()) und anderen Bildformaten, wo 0 transparent und 255/1.0 sichtbar bedeutet.

Damit die Transparenz beim Speichern erhalten bleibt, muss imagesavealpha($image, true) aufgerufen werden. Wird das Bild als JPEG gespeichert, gehen Transparenzinformationen verloren, da JPEG keinen Alphakanal unterstützt.

Bei Palette-Bildern (erstellt mit imagecreate()) ist die Anzahl der Farben auf 255 begrenzt. Bei True-Color-Bildern (erstellt mit imagecreatetruecolor()) gibt es keine praktische Begrenzung. Ab PHP 8.0 wird ein GdImage-Objekt statt eines Resource-Handles verwendet.