Comptez les couleurs uniques d’une image et affichez le top 5
Le compteur de couleurs uniques transforme des échantillons de pixels RGB en un inventaire clair des couleurs réellement présentes.
Lancer gratuitement
Il indique le nombre exact de triplets RGB distincts, le total de pixels représentés et les cinq couleurs les plus fréquentes. Les enregistrements répétés sont automatiquement fusionnés, tandis qu’un décompte facultatif permet à un échantillon de représenter plusieurs pixels identiques. Le calcul est déterministe et repose sur les valeurs exactes des canaux, sans regrouper les teintes voisines. Il convient donc aux images indexées, aux captures, aux exports graphiques et aux tests exigeant une égalité précise.
Préparez des échantillons de pixels pour un décompte exact
Fournissez les pixels sous forme d’enregistrements RGB dont les canaux rouge, vert et bleu vont de 0 à 255. Chaque enregistrement représente un pixel, sauf si vous ajoutez un décompte positif, pratique lorsqu’un décodeur ou un histogramme a déjà regroupé les valeurs répétées. Une couleur n’est considérée comme unique que si son triplet RGB complet diffère. Ainsi, RGB 20, 40, 60 et RGB 20, 40, 61 sont deux couleurs distinctes, même si elles semblent presque identiques. Le canal alpha est volontairement exclu du contrat : vos échantillons doivent donc déjà appliquer la politique de transparence ou de composition de votre processus. Vous pouvez transmettre plusieurs fois la même valeur RGB ; toutes les occurrences et tous les décomptes sont additionnés avant le classement. Les flux de pixels bruts et les histogrammes compacts conservent ainsi le même sens. Une liste vide ne décrit aucun échantillon et provoque une erreur plutôt qu’un zéro trompeur. Les canaux ou décomptes incorrects, les champs non pris en charge et les listes trop longues sont également refusés afin que les problèmes de format restent visibles.
Interprétez le nombre distinct et le classement des cinq premières couleurs
Le total distinct correspond à la taille de la table des fréquences RGB exactes après fusion des doublons. Le total de pixels est la somme du décompte de chaque enregistrement, avec une valeur de un lorsqu’il est omis. La liste principale comprend au maximum cinq éléments et peut en contenir moins si moins de cinq couleurs uniques sont présentes. Les éléments sont classés du décompte le plus élevé au plus faible. En cas d’égalité, la plus petite valeur rouge précède la plus petite valeur verte, puis bleue, afin de garantir un résultat stable entre les appels et les machines. Chaque élément contient une notation hexadécimale en majuscules, les canaux RGB d’origine, le décompte absolu et sa fréquence par rapport au total représenté. La fréquence est arrondie à six décimales pour produire un JSON compact et reproductible. Il ne s’agit pas d’un extracteur de palette perceptuelle : les teintes voisines restent séparées. Cette distinction est essentielle pour contrôler des ressources indexées, repérer des couleurs d’anticrénelage inattendues ou confirmer exactement le résultat d’une transformation. Préférez un outil de regroupement de palette lorsque la ressemblance visuelle prime sur l’identité exacte.
Exploitez le résultat pour les audits, l’optimisation et les tests
Le décompte des couleurs fournit un diagnostic compact des chaînes graphiques. Avant de publier une icône, comparez le total distinct à la taille de palette prévue ; une hausse inattendue peut révéler un anticrénelage, un mode d’export incorrect ou un arrière-plan aplati avec des valeurs légèrement différentes. Pour la compression, les cinq fréquences dominantes montrent si quelques couleurs occupent l’essentiel de l’image et peuvent guider un futur encodage indexé ou une réduction de palette. Dans des tests automatisés, conservez le total distinct et les couleurs principales comme assertions après rendu, redimensionnement ou conversion, tout en sachant qu’une interpolation peut légitimement créer de nouvelles valeurs RGB. Le champ de décompte convient aussi aux décodeurs serveur qui produisent déjà des histogrammes : ils peuvent envoyer un enregistrement par couleur observée. Cette capacité ne récupère ni ne décode de fichier ; votre application fournit les échantillons. Le traitement est local et déterministe, sans réseau, hasard ni état conservé. Vous pouvez effectuer un contrôle interactif dans le navigateur ou intégrer le même calcul par API pour $0.002.
Cas d’usage
Auditez une image indexée
Vérifiez qu’une icône ou un sprite exporté ne contient pas plus de couleurs RGB exactes que la palette prévue.
Détectez les teintes de rendu inattendues
Repérez les couleurs ajoutées par l’anticrénelage, l’interpolation, la composition ou une modification de l’export.
Résumez l’histogramme d’un décodeur
Transformez des enregistrements RGB pondérés en décompte exact et en classement stable des cinq premières fréquences.
Questions fréquentes
Qu’est-ce qu’une couleur distincte ?
C’est une combinaison unique de canaux entiers rouge, vert et bleu. Une différence sur un seul canal crée une autre couleur.
L’outil regroupe-t-il les couleurs proches ?
Non. Il compare les valeurs RGB exactes sans fusionner les teintes voisines. Utilisez une palette dominante pour un regroupement perceptuel.
À quoi sert le champ de décompte ?
Il permet à un enregistrement RGB de représenter plusieurs pixels identiques. Sans celui-ci, l’enregistrement vaut un pixel.
Que se passe-t-il s’il y a moins de cinq couleurs ?
La liste top_colors renvoie toutes les couleurs observées et comprend donc moins de cinq éléments.
Combien coûte une requête API ?
Chaque requête API coûte $0.002. Le même calcul déterministe peut aussi s’exécuter dans le navigateur.
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/image/color-count \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"pixels":[{"r":255,"g":0,"b":0,"count":4},{"r":0,"g":0,"b":255,"count":2},{"r":255,"g":0,"b":0}]}'const res = await fetch("https://api.kit.forhosting.com/image/color-count", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"pixels": [
{
"r": 255,
"g": 0,
"b": 0,
"count": 4
},
{
"r": 0,
"g": 0,
"b": 255,
"count": 2
},
{
"r": 255,
"g": 0,
"b": 0
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/color-count",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"pixels": [
{
"r": 255,
"g": 0,
"b": 0,
"count": 4
},
{
"r": 0,
"g": 0,
"b": 255,
"count": 2
},
{
"r": 255,
"g": 0,
"b": 0
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/color-count", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"pixels":[{"r":255,"g":0,"b":0,"count":4},{"r":0,"g":0,"b":255,"count":2},{"r":255,"g":0,"b":0}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"pixels":[{"r":255,"g":0,"b":0,"count":4},{"r":0,"g":0,"b":255,"count":2},{"r":255,"g":0,"b":0}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/color-count", 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
{
"pixels": [
{
"r": 255,
"g": 0,
"b": 0,
"count": 4
},
{
"r": 0,
"g": 0,
"b": 255,
"count": 2
},
{
"r": 255,
"g": 0,
"b": 0
}
]
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.color_count",
"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.
Limites
max_mb | 15 |
max_megapixels | 12 |
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. |