Interpolare due colori HSL sul percorso di tonalità più breve
Mescoli due colori muovendosi nello spazio HSL invece di calcolare la media dei canali rosso, verde e blu.
Esegui gratis nel browser
Fornisca due colori esadecimali e una frazione compresa tra zero e uno: la capacità restituisce il punto intermedio come valori hex, RGB e HSL normalizzati. La tonalità percorre il lato più breve della ruota cromatica e applica una regola fissa nei pareggi di mezzo giro, quindi la stessa richiesta produce sempre lo stesso risultato. La validazione rigorosa rende il servizio adatto a strumenti di design, pipeline di token, fotogrammi chiave e test ripetibili.
Come funziona l’interpolazione HSL sul percorso più breve
Ogni input parte da un colore esadecimale di 3 o 6 cifre, con o senza cancelletto iniziale. Il motore espande la forma abbreviata, normalizza maiuscole e minuscole, converte i canali sRGB interi in HSL e considera la tonalità come un angolo anziché come un normale numero lineare. La distinzione è importante vicino al confine della ruota cromatica. Una miscela da 350 gradi a 10 gradi deve percorrere 20 gradi attraverso il rosso, non compiere il tragitto lungo passando per quasi tutte le altre tonalità. La differenza con segno viene quindi normalizzata nell’intervallo semiaperto da -180 gradi incluso a 180 gradi escluso. Un pareggio esatto di 180 gradi sceglie sempre la direzione negativa, rendendo deterministica una decisione altrimenti ambigua. Saturazione e luminosità vengono interpolate direttamente con la stessa frazione. Il colore HSL risultante viene riconvertito in canali RGB interi arrotondati e in una stringa esadecimale minuscola di 6 cifre. I componenti HSL e il delta di tonalità sono arrotondati a 6 decimali per mantenere stabile il JSON senza perdere precisione utile. Il calcolo non utilizza rete, valori casuali, orologio o stato mutabile.
Come scegliere la frazione e leggere la risposta
Imposti t su 0 per ricevere il colore iniziale, su 1 per ottenere quello finale oppure su un decimale intermedio per calcolare un punto tra i due. Il valore 0.25 percorre un quarto di ciascun componente HSL interpolato, mentre 0.5 seleziona il punto medio. La risposta ripete entrambi gli estremi normalizzati e la frazione esatta, quindi fornisce hex, un oggetto rgb con i canali interi r, g e b e un oggetto hsl nel quale h è espresso in gradi e s e l in percentuale. Il campo hue_delta mostra l’intero percorso angolare con segno scelto prima di moltiplicarlo per t. Il relativo hue_path vale increasing, decreasing o none ed è utile per verificare gradienti che attraversano zero gradi o per riprodurre il tragitto in un altro renderer. Agli estremi in scala di grigi viene assegnata la tonalità convenzionale zero, perché un colore RGB acromatico non ha una tonalità visivamente definita. L’interpolazione resta deterministica, ma aggiungere saturazione tra un grigio e un colore cromatico può rendere visibile tale convenzione. Invii t come numero JSON e non come stringa tra virgolette.
Uso sicuro nei flussi di design e produzione
Questa operazione è adatta a qualsiasi sistema che richieda un colore riproducibile tra due punti noti. Un generatore di temi può creare token per passaggio del puntatore, pressione o transizione senza includere una libreria cromatica. Un servizio di grafici può richiedere campioni equidistanti usando frazioni come 0, 0.25, 0.5, 0.75 e 1. Una pipeline di animazione può calcolare fotogrammi chiave la cui tonalità non attraversi inaspettatamente l’arco lungo attraverso il verde o il blu. Input normalizzati e arrotondamento limitato agevolano anche i test di regressione. L’endpoint accetta intenzionalmente solo colori RGB esadecimali; canali alfa, nomi CSS, stringhe rgb(), stringhe HSL e spazi ad ampia gamma non fanno parte del contratto. Lunghezze errate, caratteri non esadecimali, campi assenti, frazioni non finite e valori fuori intervallo non superano la validazione. Un’esecuzione API riuscita costa $0.002 per elemento, mentre il browser usa lo stesso motore puro. HSL non è percettivamente uniforme: scelga uno strumento basato su LAB quando servono passaggi visivi di aspetto equidistante.
Casi d'uso
Generare gli stati di un tema
Crei colori intermedi deterministici per token di passaggio, focus, attivazione e selezione.
Creare campioni compatti di gradiente
Valuti una sequenza di frazioni per ottenere punti HSL lungo l’arco di tonalità più breve.
Produrre fotogrammi chiave
Calcoli colori stabili senza lunghe rotazioni accidentali intorno alla ruota cromatica.
Domande frequenti
Che cosa significa t?
t è la frazione di interpolazione: 0 restituisce il primo colore, 1 il secondo e i valori intermedi producono colori compresi tra i due.
Come viene scelta la direzione della tonalità?
La tonalità segue la differenza circolare più breve. Se entrambe le direzioni misurano esattamente 180 gradi, viene scelta quella decrescente.
Quali formati di colore sono accettati?
Gli input accettano colori RGB esadecimali di 3 o 6 cifre, con cancelletto iniziale facoltativo. Alfa, nomi e funzioni CSS vengono rifiutati.
Perché una miscela HSL può differire da una RGB?
HSL interpola tonalità, saturazione e luminosità, mentre RGB media le intensità dei canali; i colori intermedi seguono quindi percorsi diversi.
Quanto costa una chiamata API?
Una chiamata API riuscita costa $0.002 per elemento. Lo stesso motore deterministico può funzionare nel browser.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo 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)Esempio di richiesta
{
"color1": "#ff0000",
"color2": "#0000ff",
"t": 0.5
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "color.interpolate_hsl",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |