Zwei Farben in HSL auf dem kürzesten Farbtonweg interpolieren
Mischen Sie zwei Farben im HSL-Raum, statt den Mittelwert ihrer roten, grünen und blauen Kanäle zu bilden.
Im Browser ausführen – kostenlos
Geben Sie zwei Hexfarben und einen Anteil zwischen null und eins an; die Funktion liefert den Zwischenpunkt als normalisierte Hex-, RGB- und HSL-Werte. Der Farbton folgt der kürzeren Seite des Farbkreises. Für exakte Halbkreisgleichstände gilt eine feste Regel, sodass dieselbe Anfrage stets dasselbe Ergebnis erzeugt. Die strenge Validierung eignet sich für Designwerkzeuge, Token-Pipelines, Animations-Keyframes und reproduzierbare Tests.
So funktioniert die HSL-Interpolation auf dem kürzesten Weg
Jede Eingabe beginnt als 3- oder 6-stellige Hexfarbe mit oder ohne führendes Rautezeichen. Der Rechner erweitert die Kurzform, vereinheitlicht die Groß- und Kleinschreibung, wandelt ganzzahlige sRGB-Kanäle in HSL um und behandelt den Farbton als Winkel statt als gewöhnliche lineare Zahl. Dieser Unterschied ist an der Grenze des Farbkreises entscheidend. Eine Mischung von 350 Grad nach 10 Grad soll 20 Grad durch Rot zurücklegen und nicht den langen Weg durch fast alle anderen Farbtöne nehmen. Deshalb wird die vorzeichenbehaftete Differenz auf das halboffene Intervall von einschließlich -180 Grad bis ausschließlich 180 Grad normalisiert. Bei einem exakten Gleichstand von 180 Grad wird stets die negative Richtung gewählt; damit ist die sonst mehrdeutige Entscheidung deterministisch. Sättigung und Helligkeit werden mit demselben Anteil direkt interpoliert. Die resultierende HSL-Farbe wird wieder in gerundete ganzzahlige RGB-Kanäle und eine 6-stellige kleingeschriebene Hexzeichenfolge umgewandelt. Ausgegebene HSL-Komponenten und die Farbtondifferenz werden auf 6 Dezimalstellen gerundet, damit JSON stabil bleibt und zugleich nützliche Genauigkeit bietet. Netzwerk, Zufallswerte, Uhr und veränderlicher Zustand spielen bei der Berechnung keine Rolle.
Anteil festlegen und Antwort auswerten
Setzen Sie t auf 0, um die Ausgangsfarbe zu erhalten, auf 1 für die Zielfarbe oder auf eine Dezimalzahl dazwischen für einen Zwischenpunkt. Der Wert 0.25 legt ein Viertel des Weges durch jede interpolierte HSL-Komponente zurück, während 0.5 die Mitte wählt. Die Antwort wiederholt beide normalisierten Endfarben und den exakten Anteil. Danach folgen hex, ein rgb-Objekt mit den ganzzahligen Kanälen r, g und b sowie ein hsl-Objekt, in dem h in Grad und s und l in Prozent angegeben sind. Das Feld hue_delta zeigt den vollständigen vorzeichenbehafteten Winkelweg vor der Multiplikation mit t. Das zugehörige Feld hue_path enthält increasing, decreasing oder none. Dies hilft bei der Fehlersuche in Verläufen, die null Grad überschreiten, oder bei der Nachbildung des Weges in einem anderen Renderer. Graustufen-Endpunkte erhalten den konventionell berechneten Farbton null, da eine unbunte RGB-Farbe keinen sichtbar definierten Farbton besitzt. Die Interpolation bleibt deterministisch; eine Sättigung zwischen Grau und einer bunten Farbe kann diese Konvention jedoch sichtbar machen. Senden Sie t als JSON-Zahl und nicht als Text in Anführungszeichen.
Sicherer Einsatz in Design und Produktion
Diese Operation passt überall dort, wo ein System eine reproduzierbare Farbe zwischen zwei bekannten Stopps benötigt. Ein Theme-Generator kann Hover-, Druck- oder Übergangs-Token erzeugen, ohne eine Farbbibliothek einzubinden. Ein Diagrammdienst kann gleichmäßig verteilte Stichproben mit Anteilen wie 0, 0.25, 0.5, 0.75 und 1 anfordern. Eine Animations-Pipeline kann Keyframes berechnen, deren Farbton nicht unerwartet den langen Bogen durch Grün oder Blau durchläuft. Normalisierte Eingaben und begrenzte Rundung erleichtern außerdem Regressionstests. Der Endpoint akzeptiert absichtlich nur hexadezimale RGB-Farben; Alphakanäle, CSS-Farbnamen, rgb()-Zeichenfolgen, HSL-Zeichenfolgen und Farbräume mit großem Gamut liegen außerhalb dieses Vertrags. Ungültige Längen, nicht hexadezimale Zeichen, fehlende Felder, nicht endliche Anteile und Werte außerhalb des Bereichs scheitern an der Validierung. Eine erfolgreiche API-Ausführung kostet $0.002 pro Element, während der Browser denselben reinen Rechner nutzt. HSL ist nicht wahrnehmungsgleichmäßig; wählen Sie ein LAB-basiertes Werkzeug, wenn optisch gleichmäßige Schritte wichtiger sind.
Anwendungsfälle
Theme-Zustände erzeugen
Erstellen Sie deterministische Zwischenfarben für Hover-, Fokus-, Aktiv- und Auswahl-Token.
Kompakte Verlaufsproben erstellen
Werten Sie mehrere Anteile aus, um HSL-Stopps entlang des kürzesten Farbtonbogens zu erzeugen.
Animations-Keyframes berechnen
Erzeugen Sie stabile Farben ohne versehentliche lange Drehungen um den Farbkreis.
Häufige Fragen
Was bedeutet t?
t ist der Interpolationsanteil: 0 liefert die erste Farbe, 1 die zweite und dazwischenliegende Werte ergeben Zwischenfarben.
Wie wird die Farbtonrichtung gewählt?
Der Farbton folgt der kürzesten Kreisdifferenz. Sind beide Richtungen exakt 180 Grad lang, wird immer die abnehmende Richtung gewählt.
Welche Farbformate werden akzeptiert?
Die Eingaben akzeptieren 3- oder 6-stellige hexadezimale RGB-Farben mit optionaler führender Raute. Alpha, Namen und CSS-Funktionen werden abgelehnt.
Warum unterscheiden sich HSL- und RGB-Mischungen?
HSL interpoliert Farbton, Sättigung und Helligkeit, während RGB Kanalintensitäten mittelt. Daher entstehen unterschiedliche Zwischenwege.
Was kostet ein API-Aufruf?
Ein erfolgreicher API-Aufruf kostet $0.002 pro Element. Derselbe deterministische Rechner kann im Browser ausgeführt werden.
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
curl -X POST https://api.kit.forhosting.com/color/interpolate-hsl \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"color1":"#ff0000","color2":"#0000ff","t":0.5}'const res = await fetch("https://api.kit.forhosting.com/color/interpolate-hsl", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"color1": "#ff0000",
"color2": "#0000ff",
"t": 0.5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/color/interpolate-hsl",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"color1": "#ff0000",
"color2": "#0000ff",
"t": 0.5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/color/interpolate-hsl", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"color1":"#ff0000","color2":"#0000ff","t":0.5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"color1":"#ff0000","color2":"#0000ff","t":0.5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/color/interpolate-hsl", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"color1": "#ff0000",
"color2": "#0000ff",
"t": 0.5
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "color.interpolate_hsl",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |