Start · Sprachen · PHP · Referenz · imagecolorresolve

imagecolorresolve

Funktion

Ermittelt den Index einer exakten Farbe in der Farbtabelle eines Bildes oder gibt den Index der nächstmöglichen Farbe zurück.

seit PHP 4.0.0 Kategorie: image

Signatur

imagecolorresolve(GdImage $image, int $red, int $green, int $blue): int

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: 0255.
$green Pflicht int Grünwert der gesuchten Farbe. Erlaubter Bereich: 0255.
$blue Pflicht int Blauwert der gesuchten Farbe. Erlaubter Bereich: 0255.

Rückgabewert

Typ
int
Beschreibung
Gibt den Index der gefundenen oder nächstmöglichen Farbe in der Farbtabelle des Bildes zurück. Der Rückgabewert ist immer ein gültiger, nicht-negativer Ganzzahlwert.

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);
Index der Farbe Rot: 1 Nächster Index für (200, 50, 50): 1

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";
Verwendeter Farbindex: 42 Bild gespeichert.

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