Kubische Bézier-Farbinterpolation
Die kubische Bézier-Farbinterpolation berechnet die exakte Farbe zwischen zwei hexadezimalen Endpunkten, nachdem eine Zeitkurve den gewünschten Anteil umgeformt hat.
Im Browser ausführen – kostenlos
Geben Sie Start- und Endfarbe, einen Anteil von null bis eins sowie die vier von CSS cubic-bezier verwendeten Kontrollkoordinaten an. Das Ergebnis enthält den geglätteten Anteil, normalisierte Farben, den Hexadezimalwert und die RGB-Kanäle. So lassen sich Übergänge in Designwerkzeugen, Animationspipelines, Tests und generierten Assets reproduzieren, ohne von der Animationsuhr eines Browsers abhängig zu sein.
Trennen Sie Zeitfortschritt und sichtbaren Farbfortschritt
Eine lineare Mischung setzt fünfzig Prozent der verstrichenen Zeit mit fünfzig Prozent des Abstands zwischen zwei Farben gleich. Reale Oberflächen benötigen häufig einen anderen Rhythmus: Ein Übergang kann sanft beginnen, in der Mitte beschleunigen und sich dem Ziel langsam annähern. Diese Fähigkeit wendet vor dem Mischen der RGB-Kanäle eine kubische Bézier-Zeitkurve an. Die Eingabe t bleibt der Anteil auf der Zeitachse, während eased_t den von der Kurve erzeugten Farbanteil angibt. Diese Trennung macht das Ergebnis leicht prüfbar und wiederverwendbar. Zum Zeitpunkt null wird die Startfarbe und zum Zeitpunkt eins die Endfarbe ausgegeben. Dazwischen bestimmt die Kurve, wie schnell sich die Kanäle verändern. Da die Operation ausschließlich konkrete Zahlen erhält und keine Uhr abfragt, liefern wiederholte Anfragen mit identischen Eingaben dasselbe Ergebnis. Das hilft, wenn Renderer, Designexport, Testsuite oder Buildprozess bei einem Übergangsbild übereinstimmen müssen, ohne eine Animation auszuführen oder die Browseranzeige zu einem bestimmten Zeitpunkt zu schätzen.
So wird der kubische Bézier-Anteil gelöst
Eine CSS-ähnliche kubische Bézierkurve beginnt bei null, endet bei eins und besitzt zwei vom Aufrufer festgelegte Kontrollpunkte. Der angeforderte Zeitanteil liegt auf der x-Achse der Kurve. Das y-Polynom einfach mit derselben Zahl auszuwerten, wäre daher bei den meisten Kurven falsch. Der Rechner sucht zunächst den internen Kurvenparameter, dessen x-Koordinate dem gewünschten Anteil entspricht. Er verwendet bei geeigneter Steigung eine begrenzte Newton-Suche und andernfalls eine Bisektionssuche mit fester Schrittzahl als stabile Rückfallebene. Danach wertet er die y-Koordinate am gefundenen Parameter aus. Die x-Kontrollwerte müssen zwischen null und eins liegen; dadurch bleibt die Zeit monoton und die Antwort eindeutig. Die y-Werte dürfen von minus zehn bis zehn reichen und ermöglichen Vorwegnahme sowie Überschwingen. Verlässt das Easing den normalen Bereich, werden die interpolierten RGB-Kanäle auf gültige Bytewerte begrenzt. Dezimalwerte werden einheitlich und Kanäle auf die nächste Ganzzahl gerundet. Diese Regeln vermeiden Abhängigkeiten von Browser-Engine, Bildrate und plattformspezifischer Animationsabtastung.
Wählen Sie Eingaben und verwenden Sie die Ergebnisfarbe
Geben Sie jede Farbe mit drei oder sechs Hexadezimalstellen ein, wahlweise mit vorangestelltem Doppelkreuz. Kurzformen werden erweitert; jede akzeptierte Farbe erscheint normalisiert mit sechs Kleinbuchstaben beziehungsweise Ziffern. Legen Sie t zwischen null und eins fest und danach x1, y1, x2 und y2 in der üblichen cubic-bezier-Reihenfolge. Die verbreitete ease-in-out-Form nutzt beispielsweise 0.42, 0, 0.58 und 1. Die Antwort bewahrt die normalisierten Endpunkte und die Kurve, zeigt den berechneten geglätteten Anteil und liefert sowohl eine Hexfarbe als auch getrennte Rot-, Grün- und Blaukanäle. Nutzen Sie den Hexwert in CSS, SVG, Designtokens oder Bildanweisungen und das Kanalobjekt für strukturierte numerische Daten. Für eine Bildfolge rufen Sie die Operation mit gleichmäßig verteilten Zeitanteilen auf und lassen Endpunkte sowie Kontrollwerte unverändert. Die Validierung weist fehlerhafte Farben, nicht endliche Zahlen, Zeitanteile außerhalb des Bereichs, nicht monotone x-Kontrollen und übermäßige y-Kontrollen zurück. Eine ungültige Konfiguration kann somit nicht unbemerkt ein irreführendes Übergangsmuster erzeugen.
Anwendungsfälle
Deterministische Animationsbilder erzeugen
Tasten Sie einen geglätteten Farbübergang für Renderer oder Assetpipelines an exakten Anteilen ab, ohne eine Echtzeituhr zu verwenden.
Übergangsfarben einer Oberfläche testen
Berechnen Sie den erwarteten Hexadezimalwert für visuelle und Komponententests mit einer dokumentierten kubischen Bézierkurve.
Geglättete Designtoken-Skalen erstellen
Erzeugen Sie Farbtokens, deren Abstände dem Beschleunigungs- und Beruhigungsrhythmus einer Oberflächenanimation folgen.
Häufige Fragen
Was kostet eine Anfrage?
Jede API-Anfrage kostet $0.002. Die Browserversion kann lokal ausgeführt werden, ohne die Berechnung an die API zu senden.
Entspricht dies einer linearen Farbmischung?
Nein. Eine lineare Mischung verwendet den angegebenen Anteil direkt; diese Operation formt ihn zuerst mit der kubischen Bézierkurve um.
Warum müssen x1 und x2 zwischen null und eins liegen?
Diese Einschränkung hält den Zeitfortschritt monoton, entspricht den CSS-Zeitfunktionsregeln und erlaubt eine eindeutige Umkehrung von x.
Darf die Easingkurve überschwingen?
Ja. y1 und y2 dürfen außerhalb von null bis eins liegen. Der geglättete Anteil zeigt das Überschwingen; RGB-Kanäle werden auf gültige Werte begrenzt.
Welche Farbformate werden angenommen?
Zulässig sind drei- und sechsstellige hexadezimale RGB-Farben mit oder ohne führendes Doppelkreuz. Alphakanäle und Farbnamen sind ausgeschlossen.
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/bezier-interpolate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"color1":"#ff6600","color2":"#3366ff","t":0.5,"x1":0.42,"y1":0,"x2":0.58,"y2":1}'const res = await fetch("https://api.kit.forhosting.com/color/bezier-interpolate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"color1": "#ff6600",
"color2": "#3366ff",
"t": 0.5,
"x1": 0.42,
"y1": 0,
"x2": 0.58,
"y2": 1
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/color/bezier-interpolate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"color1": "#ff6600",
"color2": "#3366ff",
"t": 0.5,
"x1": 0.42,
"y1": 0,
"x2": 0.58,
"y2": 1
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/color/bezier-interpolate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"color1":"#ff6600","color2":"#3366ff","t":0.5,"x1":0.42,"y1":0,"x2":0.58,"y2":1}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"color1":"#ff6600","color2":"#3366ff","t":0.5,"x1":0.42,"y1":0,"x2":0.58,"y2":1}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/color/bezier-interpolate", 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": "#ff6600",
"color2": "#3366ff",
"t": 0.5,
"x1": 0.42,
"y1": 0,
"x2": 0.58,
"y2": 1
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "color.bezier_interpolate",
"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. |