Conte as cores únicas de uma imagem e veja as cinco principais
O contador de cores únicas transforma amostras de pixels RGB em um inventário claro das cores realmente presentes.
Executar grátis
Ele informa o número exato de trincas RGB distintas, o total de pixels representados e as cinco cores mais frequentes. Registros repetidos são combinados automaticamente, enquanto uma contagem opcional permite que uma amostra represente muitos pixels idênticos. O cálculo é determinístico e usa valores exatos dos canais, sem agrupar tons próximos, sendo útil para artes exportadas, imagens indexadas, capturas de tela e testes nos quais a igualdade precisa é essencial.
Prepare amostras de pixels para uma contagem exata
Forneça os pixels como registros RGB com canais vermelho, verde e azul de 0 a 255. Cada registro representa um pixel, a menos que você inclua uma contagem positiva, útil quando um decodificador ou histograma já consolidou valores repetidos. A ferramenta considera uma cor única somente quando a trinca RGB completa é diferente. Por exemplo, RGB 20, 40, 60 e RGB 20, 40, 61 são duas cores distintas, embora pareçam quase iguais. O canal alfa fica deliberadamente fora deste contrato; portanto, as amostras já devem refletir a política de transparência ou composição adotada no seu fluxo. Você pode enviar o mesmo valor RGB mais de uma vez: todas as ocorrências e contagens são somadas antes da classificação. Assim, tanto sequências brutas de pixels quanto histogramas compactos mantêm o mesmo significado. Uma lista vazia não descreve uma amostra e retorna um erro, em vez de um zero enganoso. Canais e contagens inválidos, campos não aceitos e listas grandes demais também são rejeitados para tornar visíveis os problemas no formato dos dados.
Entenda as cores distintas e a classificação das cinco principais
O total de cores distintas corresponde ao tamanho do mapa de frequências RGB exatas depois da consolidação dos registros duplicados. O total de pixels soma a contagem de cada registro, usando um quando ela não é informada. A lista principal contém no máximo cinco itens e pode ter menos quando existem menos de cinco cores únicas. Os itens são ordenados da maior para a menor contagem. Em caso de empate, aparecem primeiro os menores valores de vermelho, depois verde e azul, garantindo resultados estáveis entre chamadas e máquinas. Cada item traz notação hexadecimal em maiúsculas, canais RGB originais, contagem absoluta e frequência em relação ao total representado. A frequência é arredondada para seis casas decimais, produzindo JSON compacto e repetível. Esta não é uma ferramenta de paleta perceptual: tons vizinhos continuam separados e não são misturados em um centro de agrupamento. Essa diferença é importante ao verificar recursos indexados, detectar cores inesperadas de antisserrilhamento ou confirmar a saída exata de uma transformação. Use um extrator de paleta dominante quando a semelhança visual for mais importante que a identidade exata.
Use o resultado em auditorias, otimização e testes
A contagem de cores é um diagnóstico compacto para fluxos gráficos. Antes de publicar um ícone, compare o total distinto com o tamanho pretendido da paleta; um aumento inesperado pode revelar antisserrilhamento, modo de exportação incorreto ou fundo achatado com valores ligeiramente diferentes. Em trabalhos de compressão, as cinco maiores frequências mostram se poucas cores dominam a imagem e podem orientar uma futura codificação indexada ou redução de paleta. Em testes automatizados, armazene o total distinto e as cores principais como asserções após renderização, redimensionamento ou conversão, lembrando que operações com interpolação podem criar legitimamente novos valores RGB. O campo de contagem também facilita o uso com decodificadores no servidor que já geram histogramas, pois eles podem enviar um registro por cor observada. Esta capacidade não busca nem decodifica arquivos de imagem: seu aplicativo fornece as amostras. O processamento é local e determinístico, sem rede, aleatoriedade ou estado retido. Você pode fazer verificações interativas no navegador ou integrar o mesmo cálculo via API por US$ 0,002.
Casos de uso
Audite uma imagem indexada
Confirme que um ícone ou sprite exportado não contém mais cores RGB exatas que a paleta planejada.
Detecte tons inesperados da renderização
Encontre cores extras introduzidas por antisserrilhamento, interpolação, composição ou alteração na exportação.
Resuma o histograma de um decodificador
Transforme registros RGB ponderados em uma contagem exata e uma lista estável das cinco maiores frequências.
Perguntas frequentes
O que conta como uma cor distinta?
Uma combinação única dos canais inteiros vermelho, verde e azul. Uma diferença em qualquer canal cria outra cor.
A ferramenta agrupa cores semelhantes?
Não. Ela compara valores RGB exatos e nunca une tons próximos. Use uma paleta dominante para agrupamento perceptual.
Para que serve o campo de contagem?
Ele permite que um registro RGB represente vários pixels idênticos. Se omitido, o registro representa um pixel.
O que ocorre quando há menos de cinco cores?
A lista top_colors devolve todas as cores observadas e, portanto, contém menos de cinco itens.
Quanto custa uma solicitação de API?
Cada solicitação de API custa US$ 0,002. O mesmo cálculo determinístico também pode ser executado no navegador.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
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)Exemplo de requisição
{
"pixels": [
{
"r": 255,
"g": 0,
"b": 0,
"count": 4
},
{
"r": 0,
"g": 0,
"b": 255,
"count": 2
},
{
"r": 255,
"g": 0,
"b": 0
}
]
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.color_count",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
max_mb | 15 |
max_megapixels | 12 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |