O que é Color Quantization (Quantificação de cores)?
Muitas pessoas não possuem hardware full-color (24bits por pixel). Hardware de baixo custo armazena 8 bits por pixel e só pode mostrar 256 cores de tinta ao mesmo tempo. Para mostrar uma imagem full-color o computador precisa escolher um conjunto apropriado de cores representativas e mapear a imagem dentro destas cores, este processo é chamado color quantization ( seleção de cores ou redução de cores seria um termo melhor).
Desde que JPEG é um formato full-color, mostrar uma imagem JPEG num hardware 8 bits ou menos requer redução de cores. A velocidade e qualidade de imagem de uma visualizador JPEG rodando neste tipo de equipamento é largamente determinado pelo seu algoritmo de redução de cores. Dependendo se um método rápido e imperfeito ou bom mas lento é utilizado, você verá grande variação entre visualizadores em equipamentos 8 bits, muito mais do que ocorre em visualizadores 24 bits
Por outro lado, uma imagem GIF já foi reduzida a 256 cores ou menos. GIF tem a vantagem de que o criador da imagem pré compita a redução de cores, e os visualizadores não têm que faze-lo. Mas isto também é uma desvantagem do GIF. Se o criador da imagem reduzir as cores para um número diferente daquele que seu equipamento pode mostrar, ou você desperdiçará a capacidade de seu equipamento ou terá que reduzir novamente o número de cores da imagem, o que usualmente resulta em uma qualidade de imagem muito mais pobre do que quando se reduz apenas uma vez. Mais ainda; se o criador não utilizar um algoritmo de alta qualidade para a redução de cores, a imagem estará arruinada.
Por esta razão, JPEG promete uma imagem significativamente melhor para todos os usuários que não possuírem o mesmo hardware do criador da imagem. JPEG pode ser quantificado para coincidir precisamente com o número de cores que o hardware do visualizador é capaz de exibir. Desta forma, você será capaz de tirar vantagens de futuras melhorias nos algoritmos de quantificação, ou comprar um hardware melhor, para obter um visual melhor dos arquivos JPEG que você já possui. Com GIF você estará para sempre preso aquilo que foi enviado.
Um problema similar acontece com alguns paginadores da WWW: quando estão rodando em um display 8 bits, eles forçam todas as imagens em uma paleta de cores pré escolhida. Uma versão GIF de uma foto degrada terrivelmente nesta situação, por ser forçada a uma segunda redução. Uma imagem JPEG também não será maravilhosa nesta situação, mas parecerá melhor do que a versão GIF por ter sofrido redução de cores apenas uma vez.
Em resumo, JPEG é a melhor escolha para representar imagens fotográficas independentemente da máquina utilizada.
Acredita-se freqüentemente que uma imagem JPEG convertida de uma GIF não necessita de quantificação de cores. Isto é falso; mesmo que você supra um GIF de 256 cores ou menos em para um JPEG o que sairá descomprimido não serão 256 cores mas milhares de cores. Isto acontece porque o fenômeno de perdas do JPEG afeta cada pixel diferentemente, então 2 pixels que originaram-se de cores idênticas usualmente sairão com pequenas diferenças nas cores. Considerando a imagem como um todo, cada cor original será esmerada em um conjunto de cores aproximadas. Daí a quantificação ser sempre necessária para mostrar um JPEG colorido em um display mapeado, independentemente da fonte da imagem.
O mesmo efeito torna sem sentido falar sobre o número de cores usados por uma imagem JPEG. Mesmo que você tentasse contar o número de pixels distintos, diferentes decodificadores de JPEG retornariam diferentes resultados devido às diferenças de erros de arredondamento. JPEG pode ser classificado em colorido ou tons de cinza, mas o número de cores é inútil para ele.
Muitas pessoas criaram um hábito de colocar uma borda de cor única em torno das imagens GIF. Enquanto inútil, isto é praticamente gratuito em termos de armazenamento em GIF. Mas não é gratuito em JPEG nem em armazenamento nem em tempo de decodificação. Pior, as arestas da borda poderão criar visíveis distorções. Além disso, o quantificador, quando usado com hardware 8 bits pensará que a cor da borda é importante por existir muito dela e gastará uma entrada na paleta de cores prejudicando a qualidade da imagem principal.
Imagens em tons de cinza geralmente são convertidas sem maiores problemas.
Imagens coloridas são cheias de armadilhas. Imagens GIF fotográficas geralmente são produzidas de modo a enganar os seus olhos de forma a criar a ilusão de ver mais que as 256 cores que o GIF pode armazenar.
Se você aumentar a imagem, verá que os pixeis adjacentes são freqüentemente de cores significativamente diferentes; no tamanho normal o olho "tira a média" desses pixeis agrupados para produzir a ilusão de uma cor de valor intermediário. Isto é chamado dithering; o problema é que para o JPEG isso parece um ruído de freqüência de cores, e o JPEG não pode comprimir o ruído muito bem. O arquivo JPEG resultante é maior e de menor qualidade de imagem do que se você tivesse pego de uma imagem original se você tivesse a original. Para contornar isso, você precisa homogeneizar a imagem (smooth) GIF antes da compressão. Isso irá tirar a média dos pixeis vizinhos aproximando a cor que você pensou ter visto, e no processo desviará das rápidas mudanças de cores que geram problemas para o JPEG. O uso apropriado do Smooth irá tanto reduzir o tamanho do arquivo comprimido como gerar uma imagem de melhor qualidade.
Um excesso no fator de smooth irá enevoar a imagem o que é desejado.