Signatur
Beschreibung
imagecolorexactalpha() durchsucht die Farbtabelle (Palette) eines GD-Bildes nach einem exakten Treffer für die angegebene RGBA-Farbe. Die Farbe wird durch ihre Rot-, Grün-, Blau-Komponenten (0–255) sowie einen Alpha-Wert (0 = vollständig undurchsichtig, 127 = vollständig transparent) beschrieben.
Die Funktion ist nützlich, wenn man prüfen möchte, ob eine bestimmte Farbe inklusive Transparenz bereits in der Palette eines paletten-basierten Bildes (imagecreate()) registriert ist, bevor man sie mit imagecolorallocatealpha() neu allokiert. Gibt die Funktion -1 zurück, existiert die Farbe noch nicht.
Bei True-Color-Bildern (imagecreatetruecolor()) ist die Verwendung einer expliziten Farbtabellen-Suche in der Regel nicht notwendig, da Farben dort direkt als Pixelwert kodiert werden. Die Funktion ist daher vor allem bei paletten-basierten Bildern relevant.
Wird eine exakte Farbe benötigt, aber die Palette ist voll und enthält diese Farbe nicht, kann imagecolorclosestalpha() als Alternative verwendet werden, die die nächstgelegene Farbe liefert.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $image Pflicht | GdImage | Das GD-Bildobjekt, in dessen Farbtabelle gesucht wird. Erzeugt z. B. mit imagecreate() oder imagecreatefromgif(). |
|
| $red Pflicht | int | Rotwert der gesuchten Farbe. Muss im Bereich 0 bis 255 liegen. |
|
| $green Pflicht | int | Grünwert der gesuchten Farbe. Muss im Bereich 0 bis 255 liegen. |
|
| $blue Pflicht | int | Blauwert der gesuchten Farbe. Muss im Bereich 0 bis 255 liegen. |
|
| $alpha Pflicht | int | Alpha-Wert der gesuchten Farbe im Bereich 0 (vollständig undurchsichtig) bis 127 (vollständig transparent). |
Rückgabewert
-1 zurückgegeben.Beispiele
Prüfen, ob eine RGBA-Farbe bereits in der Palette existiert
<?php
// Paletten-Bild erzeugen
$image = imagecreate(200, 200);
// Farbe mit Alpha-Kanal allokieren (halbtransparentes Rot)
$rot = imagecolorallocatealpha($image, 255, 0, 0, 64);
// Prüfen, ob genau diese Farbe in der Palette vorhanden ist
$index = imagecolorexactalpha($image, 255, 0, 0, 64);
if ($index !== -1) {
echo "Farbe gefunden bei Index: " . $index;
} else {
echo "Farbe nicht in der Palette vorhanden.";
}
imagedestroy($image);
Farbe bedingt allokieren, wenn sie noch nicht in der Palette ist
<?php
// Paletten-Bild erzeugen
$image = imagecreate(100, 100);
// Hintergrundfarbe (erstes imagecolorallocate belegt Index 0)
$hintergrund = imagecolorallocate($image, 255, 255, 255);
// Gewünschte RGBA-Farbe
$r = 0; $g = 128; $b = 255; $a = 32;
// Nur allokieren, wenn noch nicht vorhanden
$index = imagecolorexactalpha($image, $r, $g, $b, $a);
if ($index === -1) {
$index = imagecolorallocatealpha($image, $r, $g, $b, $a);
echo "Neue Farbe allokiert bei Index: " . $index;
} else {
echo "Farbe bereits vorhanden bei Index: " . $index;
}
imagedestroy($image);
// Wichtig · Fallstricke
Palette vs. True-Color: Bei True-Color-Bildern (erzeugt mit imagecreatetruecolor()) gibt es keine klassische Farbtabelle. imagecolorexactalpha() verhält sich dort ggf. anders als erwartet; für True-Color-Bilder sollte man die Farbe direkt als RGBA-Wert verwenden.
Alpha-Skala: Beachte, dass der Alpha-Wert in GD umgekehrt zu vielen anderen Systemen ist: 0 bedeutet vollständig undurchsichtig (opak), 127 bedeutet vollständig transparent. Dies unterscheidet sich von CSS oder anderen Bildverarbeitungs-APIs, die oft 0 für transparent und 255 für opak verwenden.
Wenn die gesuchte Farbe nicht in der Palette ist und man sie nicht mit imagecolorallocatealpha() anlegen möchte (z. B. weil die Palette voll ist), kann imagecolorclosestalpha() die ähnlichste vorhandene Farbe liefern.