ImageColorresolve () ist eine sehr praktische Funktion bei der Verwendung der GD -Bibliothek, um Bilder in PHP zu verarbeiten. Seine Funktion lautet: Finden Sie den Index, der der angegebenen Farbe in der Bildpalette am nächsten liegt, und geben Sie den Index der Farbe zurück, wenn er genau übereinstimmt. Wählen Sie ansonsten die nächstgelegene Farbe gemäß dem Farbunterschied.
Dies scheint einfach zu sein, beinhaltet aber tatsächlich einen sehr exquisiten Farb -Matching -Algorithmus.
Schauen wir uns zunächst die Grundnutzung an:
<?php
// Erstellen Sie ein Palettenbild
$image = imagecreate(100, 100);
// Zuweisen Sie mehrere Farben
$white = imagecolorallocate($image, 255, 255, 255);
$red = imagecolorallocate($image, 255, 0, 0);
$blue = imagecolorallocate($image, 0, 0, 255);
// Jetzt möchte ich eine Farbe in der Nähe rot finden
$colorIndex = imagecolorresolve($image, 250, 10, 10);
echo "Der Farbindex ist gefunden:$colorIndex";
// Bild zeigen
header('Content-Type: image/png');
imagepng($image);
// Zerstöre Bildressourcen
imagedestroy($image);
?>
In diesem Beispiel möchten wir eine Farbe in der Nähe finden (250, 10, 10). Da es in der Bildpalette (255, 0, 0) rot gibt, gibt ImagebildColorresolve () den roten Index zurück.
Wenn Sie weitere offizielle Beispiele wissen möchten, können Sie sich auf die offizielle M66.NET -Dokumentation beziehen.
Wie erreicht ImageColorresolve () die interne Farbanpassung?
GD -Bilder im Palettenmodus behalten eine Reihe von Farben bei. Jede Farbe zeichnet seine RGB -Komponenten auf. Wenn ImageColorresolve () aufgerufen wird, wird es über die gesamte Palette iteriert und den Farbunterschied zwischen der angeforderten Farbe und der vorhandenen Farbe nacheinander berechnet.
Farbunterschiede werden im Allgemeinen durch euklidische Entfernung berechnet. Die Formel lautet wie folgt:
distance = (r1 - r2)2 + (g1 - g2)2 + (b1 - b2)2
Wo (R1, G1, B1) die Zielfarbe und (R2, G2, B2) ist eine Farbe in der Palette.
Diese Methode quadratisch nicht (da sie nur mit der Größe verglichen wird, kann das Auslassen von Quadrat die Leistung verbessern). Wer den kleinsten Unterschied hat, wird als "engste" Farbe angesehen.
Wenn Sie feststellen, dass die Farben während des Traversals genau gleich sind (d. H. Die drei RGB -Komponenten sind genau gleich), hört die GD -Bibliothek sofort auf zu suchen und kehrt zum Farbindex zurück. Dies verbessert die Leistung erheblich.
Wenn keine genaue passende Farbe gefunden wird und Platz für die Palette ist, kann sich ImageColorresolve () auch direkt eine neue Farbe zuweisen. Dieses Verhalten ähnelt dem ImageColorAlleCode () , aber wenn die Palette voll ist, können Sie nur die am nächsten bestehende Farbe auswählen.
Bei Bildern mit großen Paletten ist ImageColorresolve () etwas langsamer, da es durch alle Farben iteriert werden muss.
Um die Anzahl der ImageColorresolve () -Anrufe zu verringern, können gemeinsame Farbindizes im Voraus aufrechterhalten werden, um die Programmeffizienz zu verbessern.
ImageColorresolve () spielt eine wichtige Rolle in der GD -Bibliothek, insbesondere wenn das Farbmanagement in Palettenbildern durchgeführt wird. Es verwendet einen einfachen, aber effizienten Farbanpassungsalgorithmus, um sicherzustellen, dass selbst in farbbeschränkten Umgebungen die beste Annäherung an Farben gefunden werden kann.
Wenn wir verstehen, wie es funktioniert, können wir die Bildverarbeitungsprogramme besser optimieren und die Systemleistung verbessern.