Extrator de Paleta de Cores de Imagem
Carregue uma fotografia e esta ferramenta extrai automaticamente as suas cores dominantes, usando quantização de cor baseada em histograma — uma paleta pronta com códigos hex, calculada inteiramente no seu navegador, sem que nada seja enviado para um servidor.
255 visualizações
Envie uma foto para extrair suas cores dominantes — tudo é executado no seu navegador.
Por Que Não Basta Contar Píxeis
A forma mais óbvia de encontrar as cores dominantes de uma fotografia parece simples: contar quantos píxeis têm exatamente cada cor e manter as que aparecem mais vezes. Na prática, isto falha quase de imediato. Uma fotografia digital de um céu azul, por exemplo, não é um único azul uniforme — são milhares de tons de azul subtilmente diferentes, que variam píxel a píxel devido ao ruído do sensor, a gradientes de luz natural e a artefactos de compressão JPEG. Dois píxeis de céu adjacentes podem ser rgb(91, 148, 214) e rgb(92, 149, 213): visualmente idênticos, numericamente distintos. Contados como valores exatos, nenhum deles é "a cor mais comum" — cada um pode aparecer apenas uma ou duas vezes, perdido entre milhares de azuis quase idênticos mas tecnicamente diferentes. A abordagem ingénua devolve ruído, não uma paleta.
A solução é deixar de contar valores exatos de píxel e passar a contar grupos (buckets) de cores semelhantes. Esta ferramenta divide cada um dos canais vermelho, verde e azul — que normalmente vão de 0 a 255 — em 8 bandas iguais de 32 valores, usando Math.floor(valor / 32) * 32 em cada canal. Isso transforma 16,7 milhões de combinações RGB possíveis numa grelha manejável de 8 × 8 × 8 = 512 grupos. Cada píxel da imagem redimensionada cai exatamente num grupo, consoante a banda em que os seus valores de vermelho, verde e azul se encaixam, e mantém-se uma contagem contínua — usando um objeto simples como mapa hash — de quantos píxeis caem em cada grupo, além de uma soma contínua dos seus valores reais de vermelho, verde e azul.
Dos Grupos à Paleta
Depois de todos os píxeis contados, os grupos são ordenados por população e mantêm-se os 6 a 8 mais populosos. Mas a cor apresentada para cada grupo não é simplesmente o limite numérico do grupo (digamos, "224-255 vermelho, 128-159 verde, 0-31 azul") — isso seria apenas um canto um tanto arbitrário de um cubo de 32×32×32. Em vez disso, esta ferramenta calcula a verdadeira média de vermelho, verde e azul de todos os píxeis que efetivamente caíram nesse grupo, o que fica muito mais próximo do que o olho percebe como a cor representativa daquela região da imagem.
Esta abordagem de agrupamento por histograma é uma forma deliberadamente simples de quantização de cor — reduzir um conjunto grande de cores a um conjunto pequeno e representativo. Uma alternativa clássica mais sofisticada é o median-cut, definido por Paul Heckbert na sua tese de mestrado de 1980 no MIT, que divide recursivamente o espaço de cor ao longo da sua dimensão mais larga em vez de usar caixas de tamanho fixo; continua a ser a técnica por trás da redução de imagens GIF a uma paleta de 256 cores. O median-cut produz geralmente paletas percetivamente mais precisas para imagens complexas, ao custo de maior complexidade de implementação. O agrupamento por histograma de grelha fixa, usado aqui, é mais simples de compreender e suficientemente rápido para correr instantaneamente no navegador — é essa a troca que esta ferramenta faz.
Antes de qualquer contagem, a imagem carregada é primeiro reduzida para que a sua largura não exceda 200 píxeis, usando a API de canvas do HTML5. Isto diminui drasticamente o número de píxeis que é preciso ler e agrupar, e afeta muito pouco a paleta resultante, uma vez que os grupos de cor captam regiões amplas de matiz, não detalhes finos. Todo o processo — desenhar a imagem, redimensioná-la, ler os dados de píxel com getImageData() e calcular as médias de cada grupo — acontece localmente na memória do navegador. A fotografia nunca é enviada para nenhum servidor.
Perguntas Frequentes
Por que motivo esta ferramenta não procura simplesmente a única cor mais comum?
Porque em fotografias reais quase nenhum par de píxeis partilha exatamente o mesmo valor RGB — a luz natural, o ruído do sensor e a compressão fazem com que cores que parecem idênticas ao olho sejam numericamente um pouco diferentes, pelo que nenhum valor exato se repete o suficiente para ser significativo. Agrupar primeiro cores próximas em grupos é o que torna a contagem útil.
Quantas cores mostra a paleta?
Até 8 — a ferramenta agrupa todos os píxeis em 512 grupos de cor possíveis (8 níveis para cada um dos canais vermelho, verde e azul) e depois mostra os 6 a 8 grupos com mais píxeis. Uma imagem muito simples e praticamente uniforme pode devolver menos resultados se só alguns grupos estiverem preenchidos.
É a mesma técnica usada para criar imagens GIF?
Não exatamente, mas é uma parente próxima. Os GIF são normalmente reduzidos a 256 cores usando median-cut, um algoritmo de quantização mais avançado, de 1980, que divide recursivamente o espaço de cor em vez de usar uma grelha fixa. Esta ferramenta usa um agrupamento por histograma de tamanho fixo, mais simples, que é mais rápido de calcular e mais fácil de compreender, com algum custo em precisão percetiva em imagens complexas.
Carregar aqui uma fotografia envia-a para um servidor?
Não — a imagem é descodificada e desenhada num elemento canvas inteiramente dentro do seu navegador, e cada píxel é lido e analisado localmente com a API getImageData() do canvas. Nada relacionado com a fotografia é alguma vez transmitido para qualquer lado.
Por que motivo a imagem é redimensionada antes de ser analisada?
Puramente por questões de velocidade. Ler e agrupar cada píxel de uma fotografia em resolução total pode significar processar dezenas de milhões de valores; reduzir primeiro a imagem para uma largura máxima de 200px diminui isso drasticamente e altera muito pouco o resultado, já que as cores dominantes correspondem a regiões amplas, não a detalhes finos.
Ferramentas Semelhantes
Reportar um Problema
Extrator de Paleta de Cores de Imagem
Comentários
Ainda não há comentários — seja o primeiro a escrever um!