Signatur
Beschreibung
imagecolorclosest() durchsucht die Farbtabelle (Palette) eines Bildes und gibt den Index der Farbe zurück, deren RGB-Werte der gewünschten Farbe am nächsten liegen. Die Nähe wird dabei als euklidischer Abstand im RGB-Farbraum berechnet.
Diese Funktion ist besonders nützlich bei Palettenbildern (z. B. GIF oder PNG-8), die auf 256 Farben beschränkt sind. Wenn eine exakte Farbe nicht in der Palette vorhanden ist, liefert imagecolorclosest() den Index der bestmöglichen Näherung, ohne die Palette zu erweitern – anders als imagecolorallocate(), das eine neue Farbe in die Palette einfügt.
Soll eine Farbe exakt gefunden werden, sollte stattdessen imagecolorexact() verwendet werden. Wenn sowohl exakte Übereinstimmung als auch Näherungswerte akzeptabel sind, empfiehlt sich imagecolorresolve(), das zunächst nach einer exakten Übereinstimmung sucht und anderenfalls die nächste Farbe zurückgibt.
Für True-Color-Bilder (z. B. JPEG oder PNG-24) ist diese Funktion weniger relevant, da dort keine feste Farbtabelle existiert und Farben direkt kodiert werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $image Pflicht | GdImage | Das GD-Bildobjekt, das durch eine Bild-Erstellungsfunktion wie imagecreate() oder imagecreatefromgif() erzeugt wurde. |
|
| $red Pflicht | int | Der Rotanteil der gesuchten Farbe als Ganzzahl im Bereich von 0 bis 255. |
|
| $green Pflicht | int | Der Grünanteil der gesuchten Farbe als Ganzzahl im Bereich von 0 bis 255. |
|
| $blue Pflicht | int | Der Blauanteil der gesuchten Farbe als Ganzzahl im Bereich von 0 bis 255. |
Rückgabewert
-1 zurückgegeben.Beispiele
Nächste Farbe in einer GIF-Palette finden
<?php
// Palettenbasiertes Bild erstellen
$image = imagecreate(100, 100);
// Einige Farben in die Palette aufnehmen
$red = imagecolorallocate($image, 255, 0, 0);
$green = imagecolorallocate($image, 0, 255, 0);
$blue = imagecolorallocate($image, 0, 0, 255);
// Nächste Farbe zu einem leichten Orange (250, 100, 50) suchen
$closest = imagecolorclosest($image, 250, 100, 50);
echo "Index der nächsten Farbe: " . $closest;
// Gibt 0 aus, weil Rot (255,0,0) am nächsten liegt
imagedestroy($image);
Nächste Farbe beim Zeichnen verwenden
<?php
// Existierendes GIF laden
$image = imagecreatefromgif('beispiel.gif');
// Index der Farbe ermitteln, die Dunkelblau (0, 0, 128) am nächsten kommt
$colorIndex = imagecolorclosest($image, 0, 0, 128);
// Mit dieser Farbe einen Rechteck-Rahmen zeichnen
imagerectangle($image, 10, 10, 90, 90, $colorIndex);
// Bild ausgeben
header('Content-Type: image/gif');
imagegif($image);
imagedestroy($image);
// Wichtig · Fallstricke
Nur für Palettenbilder sinnvoll: Bei True-Color-Bildern, die mit imagecreatetruecolor() erstellt werden, liefert die Funktion zwar einen Wert, jedoch ist das Konzept einer Farbtabelle dort nicht anwendbar. In solchen Fällen sollte imagecolorat() in Kombination mit imagecolorsforindex() bevorzugt werden.
Unterschied zu verwandten Funktionen: imagecolorexact() gibt -1 zurück, wenn keine exakte Übereinstimmung gefunden wird. imagecolorresolve() kombiniert beide Ansätze. Für Alpha-Kanal-Unterstützung steht imagecolorclosestalpha() zur Verfügung.