168 Farbräume

Farbräume

Vom bis zum , vom bis zur , bis .
Bereit für CSS, Shader, WASM und LUTs.

Verwenden

Ein JavaScript-Paket für Farbumrechnungen. Importieren Sie einen einzelnen Farbraum mit weniger als 1.5 kB oder alle Farbräume für Umrechnungen zwischen beliebigen Paaren. Dieselben Umrechnungen verarbeiten ganze Bilder mit WASM, laufen als GLSL oder WGSL in Shadern und lassen sich als LUTs oder ICC-Profile exportieren. Agenten können sie über den MCP-Server aufrufen.

  • Gegen Referenzen getestetTests für jeden Farbraum
  • In beide Richtungenjeder Farbraum in jeden anderen
  • Winzig0.4–1.5 kB pro Farbraum
  • GemeinfreiCC0
import space from 'color-space'

space.rgb.oklch(255, 128, 0)      // → [0.732, 0.186, 53]
space.oklch.rgb(0.65, 0.25, 180)  // any of 168 × 167 pairs

space.oklch.name    // 'oklch'
space.oklch.range   // [[0,1], [0,0.4], [0,360]]

// one space only – tree-shaken, 0.4-1.5 kB
import oklch from 'color-space/oklch.js'
oklch.rgb(0.65, 0.25, 180)
Was ist ein Farbraum?

Ein Koordinatensystem für Farbe: Achsen, Wertebereiche und eine Regel, die die Zahlen an messbares Licht bindet. Dasselbe Orange ist rgb(255 128 0), oklch(0.732 0.186 53) und XYZ [49, 36.7, 4.5] – dieselbe Farbe, dreimal anders geschrieben. Eine Palette ist eine Handvoll ausgewählter Farben; ein Farbraum ist eine Art, überhaupt jede Farbe aufzuschreiben.

Farbmodell oder Farbraum – was ist der Unterschied?

Ein Farbmodell legt fest, mit welchen Komponenten eine Farbe beschrieben wird: drei Primärfarben bei RGB, Buntton, Sättigung und Helligkeit bei HSL, vier Druckfarben bei CMYK. Ein Farbraum bestimmt zusätzlich die Primärvalenzen, den Weißpunkt und die Übertragungskurve. Damit entspricht jeder Satz von Zahlen einer eindeutig messbaren Farbe. Deshalb bezeichnet rgb(255 0 0) in sRGB, Display P3 und Adobe RGB jeweils ein anderes Rot: ein Modell, drei Farbräume.

Im Alltag werden beide als Farbräume bezeichnet, auch in CSS mit color-mix(in hsl, …) und in diesem Katalog. Ein Modell kann einen bestehenden Farbraum als Grundlage verwenden: HSL und HSV basieren hier auf sRGB, wie in CSS.

Welchen Farbraum sollte ich tatsächlich verwenden?

Das hängt von der Aufgabe ab:

  • Bilder speichern und teilen – sRGB, der Standard im Web;
  • Paletten und Verläufe gestalten – OKLCH, wo gleiche Schritte gleich aussehen;
  • Rechnen mit Licht (Überblenden, Weichzeichnen, 3D) – lineares RGB;
  • Video drehen und graden – der Log-Farbraum Ihrer Kamera, ausgeliefert in Rec. 709 oder Rec. 2100;
  • messen, wie verschieden zwei Farben aussehen – CIELAB oder DIN99o.

Die Gruppierung des Katalogs nach Zweck ordnet ihn genauso.

Was sollte ich statt HSL verwenden?

OKLCH. Es behält dieselben drei Regler – Buntton, Buntheit, Helligkeit –, aber seine Helligkeit ist verlässlich: In HSL strahlt Gelb bei L=50 etwa 13-mal so viel Licht ab wie Blau bei L=50, gleiches L heißt also nicht gleiche Helligkeit. In OKLCH schon. CSS unterstützt oklch() nativ.

Warum werden meine Verläufe in der Mitte matschig?

Weil sie im gammakodierten sRGB berechnet werden, wo das Mitteln der Zahlen zweier Farben dunkleres, stumpferes Licht ergibt, als es das Mischen ihres Lichts täte. Interpolation in OKLab vermeidet das. Die Zeile interpolate jedes Dossiers zeichnet dieselbe Mischung durch zwei Farbräume nebeneinander, sodass der Unterschied vor der Wahl sichtbar ist.

Was bedeutet „außerhalb des Farbumfangs“?

Eine Farbe, die ein Farbraum beschreiben, ein anderer – oder Ihr Bildschirm – aber nicht zeigen kann. Ein leuchtendes Grün aus Display P3 gibt es in sRGB schlicht nicht: Umgerechnet fallen die Zahlen aus dem gültigen Bereich. Der Atlas macht das sichtbar: Die Plakette neben der aktuellen Farbe nennt den engsten Standard-Farbumfang, der sie enthält, und Strecken außerhalb des Bereichs liegen blass über einem Schachbrett.

Warum sieht der Druck stumpfer aus als der Bildschirm?

Ein Bildschirm strahlt Licht ab; Papier reflektiert, was seine Druckfarben nicht absorbieren. Druckfarbe auf Papier erreicht weniger leuchtende Farben – gesättigte RGB-Blau-, -Grün- und -Rottöne liegen außerhalb –, also werden sie stumpfer gedruckt. Die Druckvorstufe wandelt über ein ICC-Profil für Druckmaschine und Papier um, etwa FOGRA39 für europäisches gestrichenes Papier oder GRACoL in den USA. Das CMYK dieses Katalogs ist die einfache Formel, die CSS für device-cmyk() ohne Profil verwendet – richtig für die Zahlen, kein Proof des Drucks.

Sind die Umrechnungen exakt? Gehen bei Hin- und Rückweg Daten verloren?

Umrechnungen sind geschlossene Formeln, keine Näherungen über Tabellen, und Hin- und Rückwege landen innerhalb des Gleitkommarauschens. Die wenigen Ausnahmen sind dort dokumentiert, wo sie auftreten: OSA-UCS hat keine geschlossene Umkehrung, Atlas-Systeme wie Munsell interpolieren zwischen veröffentlichten Stufen, und die Ausgabe von rgb wird auf den sRGB-Farbumfang begrenzt – den Weg über XYZ oder lineares RGB nehmen, wenn Werte außerhalb gebraucht werden.

Sie sind auch geprüft: Jeder Farbraum verlinkt das Paper oder die Spezifikation, die er umsetzt, Werte werden überall, wo sich beide überschneiden, gegen colorjs.io getestet, die Kamera-Logs gegen die offiziellen ACES-Transformationen der Academy. formula-verification.md hält fest, was wogegen geprüft wurde – einschließlich einiger Stellen, an denen schon die veröffentlichten Paper Fehler enthielten.

Weichen die Zahlen von denen einer anderen Bibliothek ab, die Wertebereiche vergleichen: Diese hier behält die üblichen Bereiche jedes Farbraums – RGB 0–255, Lab-Helligkeit 0–100, Buntton 0–360 –, wo viele alles auf 0–1 abflachen. Jede Karte zeigt ihre Bereiche; im Code stehen sie in space.oklch.range.

Welche davon kann CSS schreiben?

Nativ rgb(), hsl(), hwb(), lab(), lch(), oklab(), oklch(), dazu color() für Display P3, Adobe RGB, ProPhoto, lineares sRGB und XYZ (D65 und D50). CSS-rec2020 ist ein reines Gamma 2.4, nicht die BT.2020-Kurve von Rec. 2020 in diesem Katalog – dieselben Zahlen bezeichnen eine andere Farbe. Der Tab css jedes Dossiers schreibt die aktuelle Farbe kopierfertig aus; Farbräume, die CSS fehlen, gibt es stattdessen als ICC-Profile oder LUTs.

Wo sind Pantone, NCS, RAL?

Das sind lizenzierte Produkte: Ihre Farben sind durch Daten definiert, die die Eigentümer verkaufen, nicht durch veröffentlichte Formeln – es gibt also keine offene Mathematik zum Umsetzen, und ihre Tabellen weiterzugeben wäre nicht legal. Nahe Verwandte mit öffentlicher Mathematik sind hier: Munsell (seine Renotation von 1943 ist öffentlich) und RAL Design (direkt in CIELAB definiert). Die Faustregel: Wurde die Mathematik je veröffentlicht, gehört sie in die Sammlung.

Kopiert