Signatur
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 0–255. |
|
| $green Pflicht | int | Grünwert der Farbe im Bereich 0–255. |
|
| $blue Pflicht | int | Blauwert der Farbe im Bereich 0–255. |
|
| $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
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.';
// 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.