Color
Ein Farbsystem auf Klassenbasis, mit Umrechnungshelfern für RGB, RGBA, HSL, HSLA, HSB/HSV und hexadezimale Farben. Dabei sind eine reich ausgestattete Klasse Color, unveränderliche Wertklassen (Rgb, Rgba, Hsl, Hsla), der Palettengenerator ColorScheme, ein Satz eigenständiger Umrechnungsfunktionen und FMT, die ANSI-Stiltabelle fürs Terminal.
Die einfacheren Helfer
hexToRgb,rgbToHexundrandomColorhaben eigene Seiten: hexToRgb, rgbToHex, randomColor. Sie werden aus demselben Modul erneut exportiert.
API
Color
Die zentrale Farbklasse. Sie nimmt eine Hex-Zeichenkette, ein Array [r, g, b, a] oder die Kanäle als einzelne Zahlen und berechnet sogleich jede Darstellung (rgb, rgba, hex, hsl, hsla) sowie die direkten Zugriffe auf die einzelnen Kanäle.
Konstruktor
new Color(
r: string | number | Array<string | number>,
g?: string | number,
b?: string | number,
a?: string | number,
)Parameter
| Parameter | Beschreibung | Typ | Standard |
|---|---|---|---|
r |
Der Rotkanal. Eine Hex-Zeichenkette (#f00 oder #ff0000, mit oder ohne #), ein Array [r, g, b, a?], oder eine Zahl |
string | number | Array<string | number> |
Erforderlich |
g |
Der Grünkanal (wird übergangen, wenn r eine Zeichenkette oder ein Array ist) |
string | number |
0 |
b |
Der Blaukanal (wird übergangen, wenn r eine Zeichenkette oder ein Array ist) |
string | number |
0 |
a |
Der Alphakanal (0 bis 1) | string | number |
1.0 |
Properties
| Eigenschaft | Beschreibung | Typ |
|---|---|---|
r |
Der Rotkanal (0 bis 255) | string | number |
g |
Der Grünkanal (0 bis 255) | string | number |
b |
Der Blaukanal (0 bis 255) | string | number |
a |
Der Alphakanal (0 bis 1) | string | number |
h |
Farbton (0 bis 360), läuft mit hsl.h mit |
string | number |
s |
Sättigung (0 bis 100), läuft mit hsl.s mit |
string | number |
l |
Helligkeit (0 bis 100), läuft mit hsl.l mit |
string | number |
rgb |
RGB-Wertobjekt | Rgb |
rgba |
RGBA-Wertobjekt | Rgba |
hex |
Hexadezimale Zeichenkette (etwa #ff0000) |
string |
hsl |
HSL-Wertobjekt | Hsl |
hsla |
HSLA-Wertobjekt | Hsla |
Methods
| Methode | Beschreibung | Rückgabe |
|---|---|---|
setHue(newHue) |
Setzt den Farbton und berechnet RGB und Hex aus dem HSL neu | void |
setSat(newSat) |
Setzt die Sättigung und berechnet RGB und Hex aus dem HSL neu | void |
setLum(newLum) |
Setzt die Helligkeit und berechnet RGB und Hex aus dem HSL neu | void |
setAlpha(newAlpha) |
Setzt das Alpha in rgba wie in hsla (rührt RGB und Hex nicht an) |
void |
updateFromHsl() |
Berechnet rgb, die Kanäle und hex aus dem aktuellen h/s/l neu (wird von den Settern oben aufgerufen) |
void |
Rgb
Ein RGB-Wertobjekt, aus einem Array gebaut. toString() gibt eine CSS-Zeichenkette rgb(...) zurück.
Konstruktor
new Rgb(col: Array<string | number>) // [r, g, b]Eigenschaften und Methoden
| Element | Beschreibung | Typ |
|---|---|---|
r |
Der Rotkanal | string | number |
g |
Der Grünkanal | string | number |
b |
Der Blaukanal | string | number |
toString() |
Gibt rgb(r,g,b) zurück |
string |
Rgba
Erweitert Rgb um einen Alphakanal. toString() gibt eine CSS-Zeichenkette rgba(...) zurück.
Konstruktor
new Rgba(col: Array<string | number>) // [r, g, b, a]Eigenschaften und Methoden
| Element | Beschreibung | Typ |
|---|---|---|
r g b |
Von Rgb geerbt |
string | number |
a |
Der Alphakanal | string | number |
toString() |
Gibt rgba(r,g,b,a) zurück |
string |
Hsl
Ein HSL-Wertobjekt, aus einem Array gebaut. toString() gibt eine CSS-Zeichenkette hsl(...) zurück.
Konstruktor
new Hsl(col: Array<string | number>) // [h, s, l]Eigenschaften und Methoden
| Element | Beschreibung | Typ |
|---|---|---|
h |
Farbton (0 bis 360) | string | number |
s |
Sättigung (0 bis 100) | string | number |
l |
Helligkeit (0 bis 100) | string | number |
toString() |
Gibt hsl(h,s%,l%) zurück |
string |
Hsla
Erweitert Hsl um einen Alphakanal. toString() gibt eine CSS-Zeichenkette hsla(...) zurück.
Konstruktor
new Hsla(col: Array<string | number>) // [h, s, l, a]Eigenschaften und Methoden
| Element | Beschreibung | Typ |
|---|---|---|
h s l |
Von Hsl geerbt |
string | number |
a |
Der Alphakanal | string | number |
toString() |
Gibt hsla(h,s%,l%,a) zurück |
string |
ColorScheme
Erzeugt eine Palette verwandter Color-Objekte – entweder unmittelbar aus einer Liste von Farben oder aus einer Grundfarbe, die um ein Array von Farbtonwinkeln gedreht wird. Statische Fabrikmethoden decken die gängigen Harmonieschemata ab.
Konstruktor
new ColorScheme(colorVal: (string | number)[], angleArray: number[])| Parameter | Beschreibung | Typ |
|---|---|---|
colorVal |
Die Grundfarbe oder, wenn angleArray undefined ist, das Array von Farben, aus dem die Palette gebaut wird |
(string | number)[] |
angleArray |
Die Farbtonversätze (in Grad), die auf die Grundfarbe angewandt werden, um die übrigen Paletteneinträge herzuleiten | number[] |
Eigenschaften und Methoden
| Element | Beschreibung | Rückgabe |
|---|---|---|
palette |
Die erzeugten Farben | Color[] |
createFromColors(colorVal) |
Baut die Palette aus einem Array von Farben | Color[] |
createFromAngles(colorVal, angleArray) |
Baut die Palette aus einer Grundfarbe und Farbtonversätzen | Color[] |
Statische Fabrikmethoden
Jede nimmt eine Grundfarbe und gibt ein ColorScheme mit einem fest vorgegebenen Satz von Farbtonwinkeln zurück.
| Methode | Farbtonwinkel | Schema |
|---|---|---|
ColorScheme.Compl(colorVal) |
[180] |
Komplementär |
ColorScheme.Triad(colorVal) |
[120, 240] |
Triadisch |
ColorScheme.Tetrad(colorVal) |
[60, 180, 240] |
Tetradisch |
ColorScheme.Analog(colorVal) |
[-45, 45] |
Analog |
ColorScheme.Split(colorVal) |
[150, 210] |
Geteilt komplementär |
ColorScheme.Accent(colorVal) |
[-45, 45, 180] |
Analog mit Akzent |
Umrechnungsfunktionen
Eigenständige Funktionen, die Color intern benutzt; alle sind zum unmittelbaren Gebrauch exportiert. Wo eine Funktion drei Kanäle entgegennimmt, darf das erste Argument auch ein einzelnes Array sein (etwa rgbToHsl([r, g, b])).
| Funktion | Beschreibung | Signatur |
|---|---|---|
componentToHex(c) |
Wandelt einen Kanal von 0 bis 255 in eine zweistellige Hex-Zeichenkette um | (c: string | number) => string |
hue2rgb(p, q, t) |
Farbtonhelfer für den Weg von HSL nach RGB (wird von hslToRgb benutzt) |
(p: number, q: number, t: number) => number |
hslToRgb(h, s, l) |
Von HSL nach [r, g, b] (0 bis 255). Nimmt [h, s, l] als erstes Argument an |
(h, s, l) => number[] |
rgbToHsl(r, g, b) |
Von RGB nach [h, s, l]. Nimmt [r, g, b] als erstes Argument an |
(r, g, b) => number[] |
rgbToHsb(r, g, b) |
Von RGB nach [h, s, b] (HSB/HSV) |
(r: number, g: number, b: number) => number[] |
hsbToRgb(h, s, v) |
Von HSB/HSV nach [r, g, b] (0 bis 255) |
(h: number, s: number, v: number) => number[] |
hsvToRgb(h, s, v) |
Ein anderer Name für hsbToRgb |
(h: number, s: number, v: number) => number[] |
hsvToHsl(h, s, b) |
Von HSB/HSV nach [h, s, l] (über rgbToHsl(hsbToRgb(...))) |
(h, s, b) => number[] |
rgbToHsv(r, g, b) |
Ein anderer Name für rgbToHsb |
(r: number, g: number, b: number) => number[] |
hexToHsb(hex) |
Von #rrggbb oder #rgb nach [h, s, b], oder null bei fehlerhafter Eingabe |
(hex: string) => number[] | null |
hexToHsv(hex) |
Ein anderer Name für hexToHsb |
(hex: string) => number[] | null |
hsbToHsl(h, s, b) |
Von HSB/HSV nach [h, s, l] |
(h, s, b) => number[] |
hslToHsb(h, s, l) |
Von HSL nach [h, s, b] |
(h, s, l) => number[] |
hslToHsv(h, s, l) |
Ein anderer Name für hslToHsb |
(h, s, l) => number[] |
componentToHex,rgbToHexundhexToRgbsind die grundlegenden Bausteine; siehe rgbToHex und hexToRgb.
Helfer fürs Alpha
Alpha wird hier von 0 bis 100 angegeben – auf derselben Prozentskala, die das übrige Modul für Sättigung und Helligkeit benutzt, und nicht von 0 bis 1, wie es das CSS-rgba() nimmt.
| Funktion | Beschreibung | Signatur |
|---|---|---|
hexToAlpha(aa) |
Von einem zweistelligen Hex-Alphakanal (ff, 80, 00) auf einen Wert von 0 bis 100 |
(aa: string) => number |
rgbaString(r,g,b,a) |
Baut eine CSS-Zeichenkette rgba(); a wird durch 100 geteilt |
(r, g, b, a) => string |
rgbaToRgb(r,g,b,a) |
Legt eine durchscheinende Farbe über Weiß und gibt ein deckendes [r, g, b] zurück |
(r, g, b, a) => number[] |
rgbaToHex(r,g,b,a) |
Dieselbe Überlagerung, zurückgegeben als sechsstellige Hex-Zeichenkette | (r, g, b, a) => string |
Helfer für Mischung und Shader-Mathematik
Die Misch- und Farbkorrekturmathematik hinter den Nachbearbeitungsfiltern von ranuts/visual (ColorAdjustFilter und Verwandte), hier exportiert zur Wiederverwendung auf der CPU-Seite (etwa um eine Miniaturvorschau zu berechnen, ohne eine GPU-Strecke hochzufahren). Anders als im übrigen Modul laufen die Kanäle hier von 0 bis 1, nicht von 0 bis 255 oder 0 bis 100 – so, wie es in Shadern üblich ist.
| Funktion | Beschreibung | Signatur |
|---|---|---|
luma(r, g, b) |
Die empfundene Helligkeit (Gewichte nach Rec. 601). Behält die Skala bei, in der die Eingaben stehen (0–1 oder 0–255) | (r, g, b) => number |
blendScreen(base, blend) |
Mischung „Negativ multiplizieren“: je Kanal 1 - (1-base)(1-blend) |
(base: RGB, blend: RGB) => RGB |
blendMultiply(base, blend) |
Mischung „Multiplizieren“: je Kanal base * blend |
(base: RGB, blend: RGB) => RGB |
blendOverlay(base, blend) |
Ineinanderkopieren: in den Schatten multiplizieren, in den Lichtern negativ multiplizieren | (base: RGB, blend: RGB) => RGB |
brightnessContrast(color, b, c) |
Je Kanal (channel - 0.5) * contrast + 0.5 + brightness |
(color: RGB, brightness, contrast) => RGB |
saturation(color, amount) |
Mischt in Richtung Leuchtdichte. 0 ergibt Graustufen, 1 lässt alles wie es ist, über 1 wird kräftiger gesättigt |
(color: RGB, amount: number) => RGB |
vibrance(color, amount) |
Wie saturation, hebt aber die matten Kanäle stärker an als die ohnehin kräftigen. Über 0 verstärkt es, unter 0 dämpft es |
(color: RGB, amount: number) => RGB |
cosinePalette(t, a, b, c, d) |
Kosinusverlauf nach Inigo Quilez: a + b·cos(2π(c·t + d)), wobei a bis d je ein RGB-Tripel sind und t die Position von 0 bis 1 |
(t, a: RGB, b: RGB, c: RGB, d: RGB) => RGB |
srgbToLinear(c) / linearToSrgb(c) |
Rechnet einen Kanal zwischen sRGB (was du aus einer Hexfarbe abliest) und linearem Licht (was die Shader-Mathematik verlangt) um | (c: number) => number |
import { blendScreen, brightnessContrast, cosinePalette, srgbToLinear, linearToSrgb } from 'ranuts/utils';
// Zwei Farben von 0 bis 1 im Modus Negativ multiplizieren mischen
const screened = blendScreen([0.8, 0.2, 0.1], [0.1, 0.5, 0.9]);
// Kontrast anheben und Helligkeit etwas senken
const graded = brightnessContrast([0.6, 0.6, 0.6], -0.05, 1.2);
// Eine prozedural erzeugte Verlaufspalette bei t=0.35 abtasten
const swatch = cosinePalette(0.35, [0.5, 0.5, 0.5], [0.5, 0.5, 0.5], [1, 1, 1], [0, 0.33, 0.67]);
// Gammarichtige Rechnung (Mischen, Beleuchtung) gehört in den linearen Raum
const linear = srgbToLinear(0.5);
const backToSrgb = linearToSrgb(linear); // ≈ 0.5Formatmuster
Reguläre Ausdrücke zum Prüfen von Farbzeichenketten. RGB_REGEX und RGBA_REGEX dulden keine Leerzeichen; entferne sie vorher (value.replace(/\s+/g, '')).
| Konstante | Passt auf |
|---|---|
HEX_COLOR_REGEX |
#rgb oder #rrggbb, # verpflichtend, Groß- und Kleinschreibung egal |
RGB_REGEX |
rgb(r,g,b) |
RGBA_REGEX |
rgba(r,g,b,a) |
FMT
Eine Sammlung von ANSI-Escape-Paaren fürs Terminal, mit denen sich Text gestalten und einfärben lässt. Jeder Eintrag ist ein Tupel [öffnen, schließen], das du um eine Zeichenkette legst, um die Ausgabe zu gestalten.
const FMT: Record<string, Array<string>>;Verfügbare Schlüssel: bold, dim, reset, italic, underline, inverse, hidden, strikethrough, black, red, green, yellow, blue, magenta, cyan, white, gray sowie die Hintergrundvarianten bgBlack, bgRed, bgGreen, bgYellow, bgBlue, bgMagenta, bgCyan, bgWhite.
Beispiel
Eine Color erzeugen
import { Color } from 'ranuts';
// Aus einer Hex-Zeichenkette (kurze oder lange Form, # wahlweise)
const red = new Color('#ff0000');
console.log(red.hex); // '#ff0000'
console.log(red.rgb.toString()); // 'rgb(255,0,0)'
console.log(red.hsl.toString()); // 'hsl(0,100%,50%)'
// Aus einzelnen Kanälen
const green = new Color(0, 255, 0);
console.log(green.hex); // '#00ff00'
// Aus einem Array (mit Alpha)
const blue = new Color([0, 0, 255, 0.5]);
console.log(blue.rgba.toString()); // 'rgba(0,0,255,0.5)'Eine Color über HSL verändern
import { Color } from 'ranuts';
const color = new Color('#ff0000');
color.setHue(120); // den Farbton bis ins Grüne drehen
console.log(color.rgb.toString()); // 'rgb(0,255,0)'
color.setLum(25); // dunkler
color.setSat(50); // Sättigung herausnehmen
color.setAlpha(0.4);
console.log(color.rgba.toString()); // 'rgba(...,0.4)'Mit ColorScheme eine Palette bauen
import { ColorScheme } from 'ranuts';
// Komplementärpaar aus einer Grundfarbe
const compl = ColorScheme.Compl('#3498db');
console.log(compl.palette.map((c) => c.hex));
// Triadisches Schema (die Grundfarbe und zwei Farben im Abstand von 120°)
const triad = ColorScheme.Triad('#3498db');
console.log(triad.palette.length); // 3
// Unmittelbar aus einer Liste von Farben
const custom = new ColorScheme(['#ff0000', '#00ff00', '#0000ff']);
console.log(custom.palette.map((c) => c.hsl.toString()));Die Umrechnungsfunktionen benutzen
import { rgbToHsl, hslToRgb, rgbToHsb, hsbToRgb, componentToHex } from 'ranuts';
console.log(rgbToHsl(255, 0, 0)); // [0, 100, 50]
console.log(hslToRgb(0, 100, 50)); // [255, 0, 0]
console.log(rgbToHsb(255, 0, 0)); // [0, 100, 100]
console.log(hsbToRgb(0, 100, 100)); // [255, 0, 0]
console.log(componentToHex(255)); // 'ff'
// Wo es beschrieben ist, wird auch ein Array als Eingabe angenommen
console.log(rgbToHsl([0, 128, 255])); // [h, s, l]Terminalausgabe mit FMT gestalten
import { FMT } from 'ranuts';
const [open, close] = FMT.green;
console.log(`${open}success${close}`); // im Terminal steht "success" in Grün
const bold = FMT.bold;
console.log(`${bold[0]}important${bold[1]}`);Hinweise
- Alles wird sofort berechnet: Eine
Colorberechnet im Konstruktor sämtliche Darstellungen,hex,rgb,rgba,hslundhslastimmen also vom Augenblick der Erzeugung an überein. - Die HSL-Setter berechnen RGB neu:
setHue,setSatundsetLumändern das HSL und leiten dann überupdateFromHslRGB und Hex neu her.setAlpharührt nur anrgbaundhsla. - Eingabe als Array oder als Kanäle: Mehrere Umrechnungsfunktionen (
rgbToHex,rgbToHsl,hslToRgb) nehmen entweder drei einzelne Kanäle oder ein einzelnes Array als erstes Argument. - HSV und HSB:
hsvToRgbist ein anderer Name fürhsbToRgb, undhsvToHsleiner für die Umrechnung von HSB nach HSL. HSV und HSB meinen hier dasselbe Modell. - FMT gilt nur fürs Terminal: Die ANSI-Escape-Folgen erscheinen nur in einem Terminal als Gestaltung, das sie versteht; in der Browserkonsole stehen sie als rohe Steuerzeichen da.