Start · Sprachen · PHP · Referenz · imagecolorexactalpha

imagecolorexactalpha

Funktion

Gibt den Index einer exakt übereinstimmenden Farbe (inkl. Alpha-Kanal) in der Farbtabelle eines Bildes zurück, oder <code>-1</code> wenn kein Treffer.

seit PHP 4.0.6 Kategorie: image

Signatur

imagecolorexactalpha(GdImage $image, int $red, int $green, int $blue, int $alpha): int

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

Typ
int
Beschreibung
Gibt den Index (ganzzahlig) der exakt übereinstimmenden Farbe in der Palette zurück. Wird keine exakt passende Farbe gefunden, wird -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 gefunden bei Index: 0

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);
Neue Farbe allokiert bei Index: 1

// 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.