Simulateur de protanopie
Le simulateur de protanopie montre la transformation d’une couleur sRGB opaque pour une personne dont les cônes sensibles aux grandes longueurs d’onde ne fonctionnent pas, situation souvent appelée cécité au rouge.
Lancer gratuitement
Saisissez une valeur hexadécimale ou des canaux RGB entiers pour obtenir la source normalisée et le résultat simulé dans les deux formats. Le calcul linéarise sRGB, applique une matrice de projection fixe de Brettel-Vienot-Mollon, limite le résultat à la gamme affichable, puis le réencode en sRGB sur huit bits. Cet outil reproductible sert à la conception et à la documentation, mais ne constitue pas une évaluation médicale.
Examinez une couleur précise de l’interface
Utilisez la valeur sRGB exacte de votre système de conception, feuille de style, graphique ou ressource exportée. Vous pouvez fournir un hexadécimal de trois ou six chiffres, une expression CSS rgb() ou trois canaux entiers séparés par des virgules. La réponse contient la source normalisée et le résultat simulé en hexadécimal et en RGB, utilisables dans une note, un test ou un comparateur. Considérez l’échantillon transformé comme un indice, et non comme une décision d’accessibilité. L’usage dépend aussi du contraste, de la taille, du contexte, des libellés, des motifs et des états interactifs. Une alerte rouge et une confirmation verte doivent donc se distinguer également par du texte ou une icône. Évaluez tous les jetons sémantiques avec la même méthode : mélanger plusieurs formules introduirait des écarts provenant des outils plutôt que des couleurs.
Comprenez la chaîne colorimétrique déterministe
La couleur est d’abord validée et normalisée en trois canaux sRGB de huit bits. Ces valeurs étant encodées avec une courbe gamma, elles sont converties en lumière linéaire avant la transformation. Le triplet obtenu est multiplié par une matrice fixe trois par trois associée à la simulation dichromatique de Brettel, Vienot et Mollon. Certains canaux peuvent sortir de la gamme, surtout avec des teintes saturées ; ils sont donc limités entre zéro et un. La fonction d’encodage sRGB est ensuite appliquée, puis les valeurs sont arrondies et formatées. Aucun réseau, hasard, horloge, profil personnel ni réglage caché n’intervient. Une entrée valide produit toujours le même JSON, ce qui convient aux tests de régression. Un autre espace colorimétrique, une autre matrice ou une autre gestion de gamme peut légitimement donner un résultat différent et doit être présenté comme une méthode distincte.
Interprétez le résultat avec discernement
Intégrez cette simulation à un examen plus large. Elle peut révéler que deux séries rouges et vertes se rapprochent, qu’un bouton destructif perd son importance ou que des statuts reposent trop sur la teinte. Améliorez alors l’interface d’origine avec des libellés, icônes, formes, motifs, bordures ou espacements, puis vérifiez le contraste selon la norme applicable. Contrôlez également les états de survol, focus, sélection, erreur, réussite et désactivation. Le modèle ne couvre ni les différences individuelles, ni les écrans, ni l’éclairage ambiant, ni tous les contextes visuels. Il ne diagnostique pas la protanopie, ne mesure pas l’acuité et ne certifie aucune conformité. Une évaluation humaine reste utile pour les produits importants. Dans un processus automatisé, conservez la source, le résultat, la méthode et la décision afin qu’une couleur simulée ne soit jamais prise pour un jeton officiel.
Cas d’usage
Réviser les jetons de conception
Transformez les couleurs d’alerte, de réussite, d’accentuation et de graphique avec une méthode stable avant publication.
Contrôler les visualisations
Comparez les séries simulées et ajoutez des libellés, motifs ou marqueurs lorsque la teinte ne suffit plus.
Créer des tests de régression
Conservez des valeurs RGB simulées déterministes afin de réexaminer précisément toute évolution de palette.
Questions fréquentes
Quel est le prix d’une simulation ?
Une requête API coûte $0.002. Chaque appel traite une couleur comme un élément.
Quelles saisies sont acceptées ?
Utilisez #RGB, #RRGGBB, rgb(r, g, b) ou trois canaux entiers séparés par des virgules, compris entre 0 et 255.
Pourquoi linéariser sRGB au préalable ?
La matrice décrit une transformation en lumière linéaire. L’appliquer directement aux valeurs gamma modifierait le calcul.
Le résultat certifie-t-il l’accessibilité ?
Non. Il simule une transformation ; l’accessibilité dépend aussi du contraste, du contexte, des repères redondants et des états.
S’agit-il d’un examen médical ?
Non. L’outil ne diagnostique pas la protanopie et ne prédit pas une perception individuelle ; il aide la conception et l’ingénierie.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/color/sim-protanopia \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"color":"#e63946"}'const res = await fetch("https://api.kit.forhosting.com/color/sim-protanopia", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"color": "#e63946"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/color/sim-protanopia",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"color": "#e63946"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/color/sim-protanopia", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"color":"#e63946"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"color":"#e63946"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/color/sim-protanopia", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"color": "#e63946"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "color.sim_protanopia",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |