Farbpaletten-Extraktor für Bilder
Laden Sie ein Foto hoch, und dieses Tool extrahiert automatisch dessen dominante Farben mittels histogrammbasierter Farbquantisierung — eine fertige Musterpalette mit Hex-Codes, vollständig in Ihrem Browser berechnet, ohne dass irgendetwas auf einen Server hochgeladen wird.
254 Aufrufe
Laden Sie ein Foto hoch, um die dominanten Farben zu extrahieren — alles läuft in Ihrem Browser.
Warum man nicht einfach Pixel zählen kann
Der naheliegende Weg, die dominanten Farben eines Fotos zu finden, klingt einfach: Man zählt, wie oft jede exakte Farbe vorkommt, und behält die häufigsten. In der Praxis scheitert das fast sofort. Ein digitales Foto eines blauen Himmels etwa ist kein einheitliches Blau — es besteht aus Tausenden leicht unterschiedlicher Blautöne, die sich Pixel für Pixel durch Sensorrauschen, natürliche Lichtverläufe und JPEG-Kompressionsartefakte verschieben. Zwei benachbarte Himmelspixel könnten rgb(91, 148, 214) und rgb(92, 149, 213) sein: optisch identisch, numerisch verschieden. Als exakte Werte gezählt, ist keiner von beiden „die häufigste Farbe" — jeder taucht vielleicht nur ein- oder zweimal auf, verborgen unter Tausenden fast identischer, aber technisch unterschiedlicher Blautöne. Der naive Ansatz liefert Rauschen statt einer Palette.
Die Lösung besteht darin, nicht mehr exakte Pixelwerte zu zählen, sondern Bereiche (Buckets) ähnlicher Farben. Dieses Tool teilt jeden der Rot-, Grün- und Blaukanäle — die normalerweise von 0 bis 255 reichen — in 8 gleich große Bänder von je 32 Werten, mit Math.floor(value / 32) * 32 auf jedem Kanal. Das verwandelt 16,7 Millionen mögliche RGB-Kombinationen in ein überschaubares Raster von 8 × 8 × 8 = 512 Buckets. Jedes Pixel im verkleinerten Bild landet in genau einem Bucket, je nachdem in welches Band seine Rot-, Grün- und Blauwerte fallen, und es wird eine laufende Zählung geführt — mithilfe eines einfachen Objekts als Hash-Map —, wie viele Pixel in jedem Bucket landen, zusammen mit einer laufenden Summe ihrer tatsächlichen Rot-, Grün- und Blauwerte.
Von Buckets zur Palette
Nachdem jedes Pixel gezählt wurde, werden die Buckets nach Häufigkeit sortiert und die 6 bis 8 am dichtesten besetzten behalten. Die für jeden Bucket angezeigte Farbe ist jedoch nicht einfach die numerische Grenze des Buckets (etwa „224–255 Rot, 128–159 Grün, 0–31 Blau") — das wäre nur eine recht willkürliche Ecke eines 32×32×32-Würfels. Stattdessen berechnet dieses Tool den tatsächlichen Durchschnitt aus Rot, Grün und Blau aller Pixel, die wirklich in diesen Bucket gefallen sind, was der Farbe, die das Auge als repräsentativ für diesen Bildbereich wahrnimmt, wesentlich näherkommt.
Dieser Ansatz des Histogramm-Binning ist eine bewusst einfache Form der Farbquantisierung — die Reduktion einer großen Farbmenge auf eine kleine, repräsentative Menge. Eine anspruchsvollere klassische Alternative ist das Median-Cut-Verfahren, das Paul Heckbert 1980 in seiner Masterarbeit am MIT definierte; es teilt den Farbraum rekursiv entlang seiner breitesten Dimension statt fester Boxen zu verwenden, und ist bis heute die Technik hinter der Reduktion von GIF-Bildern auf eine 256-Farben-Palette. Median-Cut liefert bei komplexen Bildern in der Regel wahrnehmungsgetreuere Paletten, allerdings auf Kosten einer höheren Implementierungskomplexität. Das hier verwendete Histogramm-Binning mit festem Raster ist dagegen einfacher nachzuvollziehen und schnell genug, um sofort im Browser zu laufen — das ist der Kompromiss, den dieses Tool eingeht.
Bevor überhaupt gezählt wird, wird das hochgeladene Bild zunächst mithilfe der HTML5-Canvas-API so verkleinert, dass seine Breite 200 Pixel nicht überschreitet. Das reduziert die Anzahl der zu lesenden und einzusortierenden Pixel um einen großen Faktor und beeinflusst die resultierende Palette kaum, da Farbbereiche breite Farbtonregionen abbilden, keine feinen Details. Der gesamte Prozess — das Zeichnen des Bildes, das Verkleinern, das Auslesen der Pixeldaten mit getImageData() und die Berechnung der Bucket-Durchschnitte — läuft lokal im Speicher des Browsers ab. Das Foto wird nie auf einen Server hochgeladen.
Häufig gestellte Fragen
Warum sucht dieses Tool nicht einfach die eine häufigste Farbe?
Weil in echten Fotografien fast keine zwei Pixel exakt denselben RGB-Wert teilen — natürliches Licht, Sensorrauschen und Kompression sorgen dafür, dass Farben, die dem Auge identisch erscheinen, numerisch leicht abweichen, sodass sich kein exakter Wert oft genug wiederholt, um aussagekräftig zu sein. Erst das Gruppieren benachbarter Farben in Buckets macht die Zählung sinnvoll.
Wie viele Farben zeigt die Palette an?
Bis zu 8 — das Tool gruppiert alle Pixel in 512 mögliche Farbbereiche (je 8 Stufen für Rot, Grün und Blau) und zeigt dann die 6 bis 8 am stärksten besetzten Bereiche an. Ein sehr einfaches, überwiegend flächiges Bild kann weniger Ergebnisse liefern, wenn nur wenige Bereiche überhaupt belegt sind.
Ist das dieselbe Technik, die bei der Erstellung von GIF-Bildern verwendet wird?
Nicht ganz, aber verwandt. GIFs werden meist mit Median-Cut auf 256 Farben reduziert, einem fortschrittlicheren Quantisierungsalgorithmus aus dem Jahr 1980, der den Farbraum rekursiv statt mit einem festen Raster aufteilt. Dieses Tool nutzt das einfachere, feste Histogramm-Binning, das schneller zu berechnen und leichter nachzuvollziehen ist, bei komplexen Bildern jedoch etwas an Wahrnehmungsgenauigkeit einbüßt.
Wird ein hier hochgeladenes Foto an einen Server gesendet?
Nein — das Bild wird vollständig innerhalb Ihres Browsers auf ein Canvas-Element gezeichnet, und jedes Pixel wird lokal mit der getImageData()-API von Canvas ausgelesen und analysiert. Nichts vom Foto wird jemals irgendwohin übertragen.
Warum wird das Bild vor der Analyse verkleinert?
Rein aus Geschwindigkeitsgründen. Jedes Pixel eines Fotos in voller Auflösung zu lesen und einzusortieren könnte die Verarbeitung von zig Millionen Werten bedeuten; das Bild vorher auf maximal 200px Breite zu verkleinern, reduziert das drastisch und verändert das Ergebnis kaum, da dominante Farben große Bereiche und keine feinen Details betreffen.
Ähnliche Tools
Problem melden
Farbpaletten-Extraktor für Bilder
Kommentare
Noch keine Kommentare — schreiben Sie den ersten!