Start · Sprachen · PHP · Referenz · imagecolorclosest

imagecolorclosest

Funktion

Ermittelt den Index der Farbe in der Farbtabelle eines GD-Bildes, die dem angegebenen RGB-Wert am nächsten kommt.

seit PHP 4.0.0 Kategorie: image

Signatur

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

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

Typ
int
Beschreibung
Gibt den Index (0-basiert) der Farbe in der Palette zurück, die dem angegebenen RGB-Wert am nächsten liegt. Bei einem leeren Bild ohne Farben wird -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);
Index der nächsten Farbe: 0

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.