Start · Sprachen · PHP · Referenz · imagecolorresolvealpha

imagecolorresolvealpha

Funktion

Gibt den Index einer Farbe mit dem angegebenen Alpha-Wert zurück oder löst den nächstgelegenen Farbwert auf, falls die exakte Farbe nicht vorhanden ist.

seit PHP 4.0.6 Kategorie: image

Signatur

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

Beschreibung

imagecolorresolvealpha() durchsucht die Farbtabelle eines GD-Bildes nach einem exakten Treffer für die angegebene RGBA-Farbe (Rot, Grün, Blau, Alpha). Wird die Farbe gefunden, liefert die Funktion deren Index zurück. Existiert die Farbe nicht in der Palette, wird die nächste ähnliche Farbe anhand eines Distanzmaßes ermittelt und deren Index zurückgegeben.

Diese Funktion ist besonders nützlich bei palettenbasierten Bildern (erzeugt mit imagecreate()), wo die Anzahl der verfügbaren Farben begrenzt ist. Im Gegensatz zu imagecolorexactalpha(), das bei Nichtvorhandensein -1 zurückgibt, liefert imagecolorresolvealpha() immer einen gültigen Index — analog zu imagecolorresolve(), jedoch mit Alpha-Unterstützung.

Der Alpha-Wert reicht von 0 (vollständig opak) bis 127 (vollständig transparent). Diese Funktion kombiniert intern das Verhalten von imagecolorexactalpha() und imagecolorclosestalpha() in einem einzigen Aufruf.

Parameter

Name Typ Default Beschreibung
$image Pflicht GdImage Das GD-Bildobjekt, das mit Funktionen wie imagecreate() oder imagecreatefromjpeg() erstellt wurde.
$red Pflicht int Rotwert der Farbe, ein Ganzzahlwert zwischen 0 und 255.
$green Pflicht int Grünwert der Farbe, ein Ganzzahlwert zwischen 0 und 255.
$blue Pflicht int Blauwert der Farbe, ein Ganzzahlwert zwischen 0 und 255.
$alpha Pflicht int Alpha-Transparenzwert zwischen 0 (vollständig opak) und 127 (vollständig transparent).

Rückgabewert

Typ
int
Beschreibung
Gibt immer einen gültigen Farbindex aus der Palette des Bildes zurück. Ist die exakte RGBA-Farbe vorhanden, wird deren Index zurückgegeben; andernfalls der Index der nächstähnlichen Farbe in der Palette.

Beispiele

Farbindex mit Alpha auflösen

<?php
// Palettenbasiertes Bild erstellen
$image = imagecreate(200, 200);

// Hintergrundfarbe definieren (erste Farbe = Hintergrund)
$background = imagecolorallocate($image, 255, 255, 255);

// Eine halbtransparente Rotfarbe allokieren
$red = imagecolorallocatealpha($image, 255, 0, 0, 64);

// Index der exakt gleichen oder nächstliegenden Farbe ermitteln
$index = imagecolorresolvealpha($image, 255, 0, 0, 64);
echo "Index der aufgelösten Farbe: " . $index;

imagedestroy($image);
?>
Index der aufgelösten Farbe: 1

Fallback auf nächste Farbe wenn exakte nicht vorhanden

<?php
// Palettenbasiertes Bild erstellen
$image = imagecreate(100, 100);

// Nur eine Farbe registrieren
$weiß = imagecolorallocate($image, 255, 255, 255);
$blau = imagecolorallocatealpha($image, 0, 0, 200, 50);

// Nicht registrierte, aber ähnliche Farbe auflösen
// Exakt (0, 0, 210, 50) existiert nicht, wird aber nächstliegendem Index zugewiesen
$index = imagecolorresolvealpha($image, 0, 0, 210, 50);
echo "Aufgelöster Index (nächste Farbe): " . $index . "\n";

// Zum Vergleich: imagecolorexactalpha gibt -1 zurück
$exakt = imagecolorexactalpha($image, 0, 0, 210, 50);
echo "Exakter Index (nicht gefunden): " . $exakt . "\n";

imagedestroy($image);
?>
Aufgelöster Index (nächste Farbe): 1 Exakter Index (nicht gefunden): -1

// Wichtig · Fallstricke

Hinweis zur Bildart: Diese Funktion arbeitet primär mit palettenbasierten Bildern (imagecreate()). Bei True-Color-Bildern (imagecreatetruecolor()) ist das Konzept eines Farbindex nicht gleichwertig anwendbar, da True-Color-Bilder keine begrenzte Palette verwenden.

Alpha-Transparenz aktivieren: Damit die Transparenz korrekt gerendert wird, sollte bei palettenbasierten Bildern imagecolortransparent() gesetzt oder imagesavealpha() bei PNG-Ausgaben verwendet werden.

Reihenfolge der Palette: Da die Funktion bei Nichtvorhandensein einer Farbe die nächstliegende zurückgibt, kann das Ergebnis von der Anzahl und Zusammensetzung der bereits allozierten Farben abhängen. Für vorhersehbare Ergebnisse sollte imagecolorallocatealpha() vor dem Aufruf genutzt werden.