Signatur
Beschreibung
imagecolorresolve() sucht in der Farbtabelle eines palettenbasierten GD-Bildes nach der exakten Kombination aus Rot-, Grün- und Blauwerten. Wird die Farbe gefunden, gibt die Funktion deren Index zurück. Ist die Farbe nicht vorhanden, wird automatisch die am nächsten liegende Farbe (nach euklidischem Abstand im RGB-Farbraum) zurückgegeben.
Die Funktion ist besonders nützlich, wenn auf Bildern mit begrenzter Farbpalette (z. B. GIF oder PNG-8) gearbeitet wird und sichergestellt werden soll, dass immer ein gültiger Index zurückkommt – im Gegensatz zu imagecolorexact(), das bei fehlender Farbe -1 zurückgibt.
Soll die Farbe in die Palette eingetragen werden, wenn sie nicht existiert, bietet sich stattdessen imagecolorresolvealpha() (mit Alpha-Kanal) oder imagecolorclosest() als Alternative an. Für Truecolor-Bilder ist imagecolorresolve() nicht erforderlich, da dort Farben direkt als RGB-Wert kodiert werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $image Pflicht | GdImage | Ein GD-Bildobjekt, das zuvor mit einer Erstellungsfunktion wie imagecreate() oder imagecreatefromgif() erzeugt wurde. |
|
| $red Pflicht | int | Rotwert der gesuchten Farbe. Erlaubter Bereich: 0–255. |
|
| $green Pflicht | int | Grünwert der gesuchten Farbe. Erlaubter Bereich: 0–255. |
|
| $blue Pflicht | int | Blauwert der gesuchten Farbe. Erlaubter Bereich: 0–255. |
Rückgabewert
Beispiele
Farbe in Palettenbilder auflösen
<?php
// Erstelle ein palettenbasiertes Bild
$image = imagecreate(200, 100);
// Farben in die Palette eintragen
$white = imagecolorallocate($image, 255, 255, 255);
$red = imagecolorallocate($image, 255, 0, 0);
$blue = imagecolorallocate($image, 0, 0, 255);
// Exakte Farbe vorhanden: Index wird zurückgegeben
$index = imagecolorresolve($image, 255, 0, 0);
echo "Index der Farbe Rot: " . $index . "\n";
// Farbe nicht exakt vorhanden: nächste Farbe wird zurückgegeben
$indexNear = imagecolorresolve($image, 200, 50, 50);
echo "Nächster Index für (200, 50, 50): " . $indexNear . "\n";
imagedestroy($image);
Farbresolve bei GIF-Bild anwenden
<?php
// Lädt ein bestehendes GIF-Bild (palettenbasiert)
$image = imagecreatefromgif('beispiel.gif');
if ($image === false) {
die('Bild konnte nicht geladen werden.');
}
// Versuche, einen bestimmten Blauton zu finden oder die nächste Alternative
$colorIndex = imagecolorresolve($image, 30, 100, 200);
echo "Verwendeter Farbindex: " . $colorIndex . "\n";
// Verwende den gefundenen Index zum Zeichnen
imageline($image, 0, 0, imagesx($image), imagesy($image), $colorIndex);
imagegif($image, 'ausgabe.gif');
imagedestroy($image);
echo "Bild gespeichert.\n";
// Wichtig · Fallstricke
Nur für Palettenbilder: imagecolorresolve() funktioniert ausschließlich mit palettenbasierten Bildern (erstellt mit imagecreate()). Bei Truecolor-Bildern (erstellt mit imagecreatetruecolor()) sind Farb-Indizes nicht relevant, da Farben direkt als 24-Bit-RGB-Werte im Pixel gespeichert werden.
Falls sichergestellt werden soll, dass eine Farbe zur Palette hinzugefügt wird, wenn sie fehlt, ist imagecolorallocate() in Kombination mit imagecolorexact() geeigneter. Die Palette eines GIF-Bildes ist auf maximal 256 Einträge begrenzt.