Também disponível em: English · Español · Français · العربية
Paleta de cores a partir de uma imagem
Extrai uma paleta de uma fotografia agrupando, não contando, com a diferença medida e mostrada na sua própria imagem.
O que é um extractor de paletas de cor
Pega numa imagem e devolve-lhe um punhado de cores que a representam, em códigos hex que pode colar numa folha de estilos ou num ficheiro de desenho. Usa-se para construir um esquema à volta de uma fotografia, para acertar as cores da marca com um material já existente, ou só para dar nome às cores de algo de que se gosta.
Este agrupa as cores em vez de as contar, o que é outro algoritmo com um resultado visivelmente diferente. Deixa-o ainda mudar para o método de contagem na sua própria imagem e mostra-lhe o que muda, porque essa comparação é a razão de ser da página.
A sua imagem é descodificada pelo seu próprio navegador e não sai da máquina. Não há envio, nem servidor, nem conta — e aqui isso importa mais do que na maioria das ferramentas, porque o ficheiro que entrega costuma ser uma fotografia.
Como usar o extractor de paletas
- Escolha ou largue uma imagem. Serve tudo o que o seu navegador souber mostrar: JPEG, PNG, WebP, GIF. É lida localmente e reduzida antes da amostragem, por isso uma foto grande não é mais lenta do que uma pequena.
- Defina quantas amostras quer. Entre duas e dez. Cinco é a resposta habitual para uma paleta de desenho; acima de oito, as cores começam a estar realmente próximas umas das outras em quase qualquer fotografia.
- Copie as cores e experimente o outro método. Cada amostra copia-se sozinha ou todas de uma vez. Vale a pena carregar no selector de método pelo menos uma vez: o painel abaixo indica quão afastadas estão as duas amostras mais próximas em cada abordagem, na sua imagem e não em abstracto.
Contar as cores é o algoritmo errado
A forma óbvia de encontrar as cores dominantes de uma imagem é contá-las e ficar com as mais comuns. É o que quase todas as ferramentas fazem. E tem um problema que só aparece com fotografias reais.
Não se podem contar as cores directamente, porque uma fotografia quase não contém píxeis exactamente repetidos: disso tratam o ruído do sensor e os gradientes. Por isso quantiza-se primeiro: arredonda-se cada píxel para um compartimento grosseiro e contam-se os compartimentos. E depois desse passo, os mais povoados são todos vizinhos do tom que preenche a maior parte do enquadramento. Uma paisagem devolve cinco verdes. Um retrato devolve cinco tons de pele. Obtêm-se cinco amostras de uma região em vez de cinco regiões.
O agrupamento faz outra pergunta. Em vez de «que cores aparecem mais», pergunta «onde estão os grupos», e põe uma amostra em cada um. As cores que realmente definem o aspecto de uma imagem — o laranja de um pôr do sol que ocupa quatro por cento do enquadramento, o único objecto vermelho numa rua cinzenta — são precisamente as que a contagem descarta e o agrupamento guarda.
Medimos a diferença antes de construir a página, porque se a margem fosse pequena o honesto teria sido não a publicar. Em vinte fotografias vulgares, tomando a distância em Oklab entre as duas amostras mais parecidas como medida de se uma paleta serve: a mediana do método de contagem foi 0,0308 e a do agrupamento 0,1410, uma melhoria mediana de 4,6 vezes. O agrupamento ganhou nas vinte, entre 1,4 e 7,2 vezes.
Uma correcção ao que esperávamos, porque é o tipo de coisa que se repete assim que alguém a escreve. A previsão era que a contagem produz tons baços quase idênticos. Normalmente não chega a tanto: tomando 0,02 como o ponto em que duas cores deixam de se distinguir, só uma paleta em vinte tinha duas amostras assim tão próximas. O que a contagem produz de facto são amostras agrupadas, quatro a cinco vezes menos separadas do que podiam estar, mas não literalmente a mesma cor. A ferramenta indica o número real e não a afirmação mais fácil de repetir.
Limitações assumidas
A imagem é reduzida e amostrada numa grelha antes de se agrupar seja o que for. É deliberado: uma fotografia de vinte e quatro megapíxeis não precisa que se examine cada píxel para encontrar cinco cores, e agrupá-los todos mediria a sua paciência e não a imagem. Significa, isso sim, que um detalhe muito pequeno mas muito saturado se pode perder se não sobreviver nem à redução nem à grelha.
A amostragem é determinista, por isso a mesma imagem dá sempre a mesma paleta. Vale mais do que parece: uma ferramenta que devolvesse cores diferentes a cada passagem não serviria para escolher algo que depois se cola numa folha de estilos. O custo é que o resultado depende da grelha, e uma imagem com um padrão repetitivo forte alinhado com ela poderia em teoria ser mal amostrada.
Cada amostra é ajustada a uma cor que ocorre mesmo na imagem, em vez de ser dada como média do grupo. A média de um grupo é uma cor que pode não existir na fotografia, e é estranho entregá-la a alguém como «uma cor desta imagem». Em troca, a amostra é um píxel real e não o centro matemático do seu grupo.
Os píxeis totalmente transparentes são ignorados. Incluí-los arrastaria todas as amostras para o fundo da tela, que é uma cor do seu navegador e não da sua imagem. Os parcialmente transparentes contam tal como são desenhados, que é o que vê.
O agrupamento não sabe qual é o assunto. Encontra grupos de cor, não aquilo que lhe interessa, por isso uma fotografia com um fundo grande e pouco interessante gastará amostras nele em proporção ao seu tamanho. Se quiser as cores de um objecto, recorte-o antes: a ferramenta de recorte deste site fá-lo e também não envia nada. O motor leva 31 verificações, incluindo uma imagem sintética cuja resposta correcta de cinco cores é conhecida por construção.
Porque é gratuito
Descodificar uma imagem e agrupar uns milhares de píxeis é trabalho que a sua própria máquina faz num instante, e é a única máquina envolvida. Nada é enviado, por isso não há nada a pagar nem nada para pôr atrás de uma conta.
Se quiser uma cor e não uma paleta, o selector de cor de imagem deste site deixa-o clicar num ponto e lê-la. E se depois quiser trabalhar com as cores, o conversor de cor e o gerador de gradientes aceitam os códigos hex directamente daqui.