Farbe

Farbberechnung ohne selbstgebautes Hex-Parsing und RGB-Mischen. Farben als Eingabe sind Strings der Form "#rrggbb" / "#rrggbbaa" oder { r, g, b, a }-Tabellen (0-255, a optional); Farben als Ausgabe sind { r, g, b, a }-Tabellen, außer der Name sagt Hex. Mischen und Anpassen verwenden standardmäßig OKLab, einen wahrnehmungsbasierten Raum, in dem gleiche Schritte gleich aussehen; `space` kann "oklab", "oklch", "rgb" oder "hsl" sein. Die Ergebnisse werden durch Verringern der Chroma auf sRGB begrenzt, sodass Farbton und Helligkeit erhalten bleiben. Listen (ramp, shades) entstehen in einem einzigen Aufruf. (11 Funktionen)

Farbberechnung ohne selbstgebautes Hex-Parsing und RGB-Mischen. Farben als Eingabe sind Strings der Form "#rrggbb" / "#rrggbbaa" oder { r, g, b, a }-Tabellen (0-255, a optional); Farben als Ausgabe sind { r, g, b, a }-Tabellen, außer der Name sagt Hex. Mischen und Anpassen verwenden standardmäßig OKLab, einen wahrnehmungsbasierten Raum, in dem gleiche Schritte gleich aussehen; space kann "oklab", "oklch", "rgb" oder "hsl" sein. Die Ergebnisse werden durch Verringern der Chroma auf sRGB begrenzt, sodass Farbton und Helligkeit erhalten bleiben. Listen (ramp, shades) entstehen in einem einzigen Aufruf.

app.color.adjust(c, opts?) — rein

Ändert Helligkeit, Chroma, Farbton, Sättigung oder Alpha einer Farbe, absolut oder relativ. Das Ergebnis wird durch Verringern der Chroma auf den sRGB-Farbraum begrenzt (Helligkeit und Farbton bleiben erhalten), nicht durch Abschneiden der Kanäle.

  • c (color) — Eine Farbe: "#rrggbb", "#rrggbbaa" oder { r, g, b, a }.
  • opts (table, optional) — Absolute Schlüssel setzen einen Wert; die Schlüssel mit d-Präfix addieren dazu (erst wird gesetzt, dann das Delta angewendet). Weggelassene Schlüssel behalten den Wert der Farbe.
    • lightness (number) — Setzt die Helligkeit: OKLab/OKLCH-L (0 Schwarz - 1 Weiß) oder HSL-Helligkeit mit space = "hsl".
    • chroma (number ≥ 0) — Setzt die OKLCH-Chroma (Farbigkeit, 0 = Grau; sRGB reicht bis etwa 0.32). Nicht verfügbar mit space = "hsl".
    • hue (number) — Setzt den Farbtonwinkel in Grad (läuft bei 360 um).
    • saturation (number 0–1) — Setzt die Sättigung 0-1: HSL-Sättigung mit space = "hsl"; sonst die Chroma als Anteil der Chroma, die sRGB bei dieser Helligkeit und diesem Farbton maximal zulässt.
    • alpha (number 0–255) — Setzt das Alpha, 0-255.
    • dLightness (number) — Addiert zur Helligkeit (negativ dunkelt ab).
    • dChroma (number) — Addiert zur Chroma.
    • dHue (number) — Dreht den Farbton um so viele Grad.
    • dSaturation (number) — Addiert zur Sättigung (Skala 0-1).
    • dAlpha (number) — Addiert zum Alpha (Skala 0-255).
    • space (string; Standard "oklab") — "oklab" | "oklch" (hier identisch) | "hsl". "rgb" hat keine Helligkeits- oder Farbtonachse und wird abgelehnt.

Gibt zurück (table): { r, g, b, a }, jeweils 0-255.

app.color.contrast(a, b) — rein

WCAG-Kontrastverhältnis zwischen zwei Farben (Alpha wird ignoriert), von 1 (identisch) bis 21 (Schwarz auf Weiß). 4.5 ist das übliche Minimum für lesbaren Text.

  • a (color) — Eine Farbe: "#rrggbb", "#rrggbbaa" oder { r, g, b, a }.
  • b (color) — Eine Farbe: "#rrggbb", "#rrggbbaa" oder { r, g, b, a }.

Gibt zurück (number): Das Verhältnis, 1-21.

app.color.darken(c, amount, space?) — rein

Kurzform für app.color.adjust(c, { dLightness = -amount }).

  • c (color) — Eine Farbe: "#rrggbb", "#rrggbbaa" oder { r, g, b, a }.
  • amount (number) — Wird von der Helligkeit abgezogen (OKLab-L-Einheiten, 0-1).
  • space (string, optional) — Wo die Helligkeit gemessen wird: "oklab" (Standard), "oklch" oder "hsl".

Gibt zurück (table): { r, g, b, a }, jeweils 0-255.

app.color.distance(a, b) — rein

Euklidischer Abstand zwischen zwei Farben in OKLab (Alpha wird ignoriert). 0 = identisch; Schwarz zu Weiß ist 1; etwa 0.02 ist kaum wahrnehmbar.

  • a (color) — Eine Farbe: "#rrggbb", "#rrggbbaa" oder { r, g, b, a }.
  • b (color) — Eine Farbe: "#rrggbb", "#rrggbbaa" oder { r, g, b, a }.

Gibt zurück (number): Der Abstand, 0 oder mehr.

app.color.hex(c, withAlpha?) — rein

Eine Farbe als Hex-String in Kleinbuchstaben.

  • c (color) — Eine Farbe: "#rrggbb", "#rrggbbaa" oder { r, g, b, a }.
  • withAlpha (boolean, optional) — true für "#rrggbbaa"; Standard "#rrggbb".

Gibt zurück (string): "#rrggbb" oder mit withAlpha "#rrggbbaa".

app.color.lighten(c, amount, space?) — rein

Kurzform für app.color.adjust(c, { dLightness = amount }).

  • c (color) — Eine Farbe: "#rrggbb", "#rrggbbaa" oder { r, g, b, a }.
  • amount (number) — Wird zur Helligkeit addiert (OKLab-L-Einheiten, 0-1).
  • space (string, optional) — Wo die Helligkeit gemessen wird: "oklab" (Standard), "oklch" oder "hsl".

Gibt zurück (table): { r, g, b, a }, jeweils 0-255.

app.color.mix(a, b, t, space?) — rein

Mischt zwei Farben (auch das Alpha) in einem wahrnehmungsbasierten Raum; standardmäßig OKLab, das die schlammigen Mittelwerte des RGB-Mischens vermeidet.

  • a (color) — Eine Farbe: "#rrggbb", "#rrggbbaa" oder { r, g, b, a }.
  • b (color) — Eine Farbe: "#rrggbb", "#rrggbbaa" oder { r, g, b, a }.
  • t (number) — 0 = a, 1 = b; auf 0-1 begrenzt.
  • space (string, optional) — Interpolationsraum: "oklab" (Standard), "oklch" (der Farbton läuft den kurzen Weg), "rgb" oder "hsl".

Gibt zurück (table): { r, g, b, a }, jeweils 0-255.

app.color.nearest(c, palette) — rein

Der Paletteneintrag, der c nach OKLab-Abstand am nächsten liegt (Alpha wird ignoriert). Bei Gleichstand gewinnt der frühere Eintrag.

  • c (color) — Eine Farbe: "#rrggbb", "#rrggbbaa" oder { r, g, b, a }.
  • palette (table) — Eine nicht leere Liste von Farben.

Gibt zurück (number): Der 1-basierte Index in palette.

app.color.parse(c) — rein

Normalisiert jede akzeptierte Farbe zu { r, g, b, a } (a = 255, wenn die Eingabe keins hat).

  • c (color) — Eine Farbe: "#rrggbb", "#rrggbbaa" oder { r, g, b, a }.

Gibt zurück (table): { r, g, b, a }, jeweils 0-255.

app.color.ramp(stops, n, space?) — rein

Ein Farbverlauf, abgetastet zu einer Liste von n Farben, vom ersten bis zum letzten Stopp, beide Endpunkte eingeschlossen. Ein Aufruf, unabhängig von n.

  • stops (table) — Eine Liste von Farben oder von { color =, pos = } mit pos 0-1 (Stopps ohne pos werden gleichmäßig verteilt). Mindestens einer ist nötig.
  • n (number) — Wie viele Farben zurückgegeben werden, 1-4096. Bei 1 wird der erste Stopp zurückgegeben.
  • space (string, optional) — Interpolationsraum: "oklab" (Standard), "oklch" (der Farbton läuft den kurzen Weg), "rgb" oder "hsl".

Gibt zurück (table): Eine Liste von n { r, g, b, a }-Farben.

app.color.shades(base, n, opts?) — rein

Eine Liste von n Farben von Schatten bis Licht rund um base, zum Schattieren. Die Basis liegt bei Index floor(n / 2) + 1 (bei ungeradem n in der Mitte) und wird unverändert zurückgegeben. Läuft f von -1 (am dunkelsten) über 0 (Basis) bis +1 (am hellsten), hat die Abstufung i die OKLab-Helligkeit L + f * spread / 2 (auf 0-1 begrenzt), den Farbton H + f * hueShift und die Chroma C * (1 - 0.4 * f^2), damit die Extreme innerhalb von sRGB bleiben (was noch außerhalb liegt, verliert Chroma, nie Helligkeit). Alpha bleibt erhalten. Die Helligkeit steigt entlang der Liste monoton.

  • base (color) — Eine Farbe: "#rrggbb", "#rrggbbaa" oder { r, g, b, a }.
  • n (number) — Wie viele Farben zurückgegeben werden, 1-4096.
  • opts (table, optional)
    • spread (number; Standard 0.5) — Gesamter OKLab-Helligkeitsumfang, von Schatten bis Licht (die Basis liegt in der Mitte: die halbe Spanne nach unten, die halbe nach oben). Auf 0-1 begrenzt.
    • hueShift (number; Standard 8) — Grad, um die sich der Farbton an den Extremen dreht: Schatten um -hueShift, Lichter um +hueShift, linear auf 0 an der Basis skalierend.

Gibt zurück (table): Eine Liste von n { r, g, b, a }-Farben, die dunkelste zuerst.

Als Markdown: color.md.