como funciona a compressão jpeg
Como funciona a compressão JPEG
O JPEG funciona descartando informação que seu olho tem dificuldade de notar. Entender qual informação explica por que a qualidade 80 fica boa, por que o texto ganha halos e por que salvar de novo é corrosivo.
01
Passo um: separar brilho de cor e depois jogar cor fora
A imagem é convertida de vermelho-verde-azul para um canal de brilho e dois canais de diferença de cor. Isso ainda não é compressão: é uma reorganização que separa aquilo em que seu olho é bom daquilo em que não é.
A visão humana resolve detalhe fino muito melhor no brilho do que na cor. O JPEG explora isso na hora com a subamostragem de croma: os canais de cor são guardados com metade da resolução em cada direção, o que descarta três quartos dos dados de cor antes de qualquer matemática esperta rodar. Numa fotografia, isso é essencialmente invisível.
Numa captura de tela com texto vermelho sobre branco é bem visível, e é a razão de o texto dentro de um JPEG pegar franjas coloridas. Nunca sobrou resolução de cor suficiente para colocar uma borda vermelha dura.
02
Passo dois: transformar blocos de 8×8 em frequências
Cada canal é cortado em blocos de 8×8 pixels, e cada bloco passa por uma transformada de cosseno discreta. A saída não são pixels. São 64 coeficientes descrevendo quanto o bloco contém de cada frequência espacial — um para o brilho médio, depois padrões de variação progressivamente mais finos.
Na maioria dos blocos do mundo real a energia se acumula nos primeiros coeficientes. Um pedaço de céu é quase inteiramente seu valor médio, com quantidades minúsculas de todo o resto. Esse passo é sem perdas e reversível; não economizou um byte. O que ele fez foi ordenar a informação por quanto ela importa.
03
Passo três: quantização — é aqui que o jogo é decidido
Cada um dos 64 coeficientes é dividido por um valor de uma tabela de quantização e arredondado para um inteiro. Coeficientes pequenos viram zero. Esse é o único passo com perdas do JPEG, e é exatamente o que o controle de qualidade regula: qualidade 90 usa uma tabela suave, qualidade 30 uma brutal.
As tabelas são feitas para dividir com mais força os coeficientes de alta frequência, porque ali está o detalhe fino que seu olho tem menos chance de sentir falta. Depois da quantização, um bloco típico que começou com 64 números diferentes de zero fica com cinco ou seis, e o resto são zeros — e uma sequência longa de zeros é exatamente o que o estágio final comprime até quase nada.
Tudo o que as pessoas notam no JPEG vem desse passo. O aspecto quadriculado em qualidade baixa são blocos de 8×8 cujos coeficientes foram achatados tanto que os blocos vizinhos já não combinam na borda que compartilham. O anelamento em volta do texto são os coeficientes de alta frequência necessários para descrever uma borda dura sendo quantizados até sumir, deixando uma ondulação. Os dois são o algoritmo funcionando como projetado sobre um conteúdo para o qual não foi projetado.
- Qualidade 90–100
- Quase sem perdas, e grande. Só vale para imagens que você vai editar de novo.
- Qualidade 75–85
- O ponto ideal. Normalmente um terço do tamanho de 100 e difícil de diferenciar.
- Qualidade 50–70
- Visível se você olhar de perto. Serve para miniaturas, não para nada com texto.
- Abaixo de 50
- Quadriculado e anelamento são óbvios. A economia em relação a 75 é bem menor que o estrago.
04
Passo quatro: empacotar, sem perdas
Os coeficientes quantizados são lidos numa ordem em ziguezague que vai de baixa frequência para alta, o que agrupa todos aqueles zeros numa única sequência longa no fim. Essa sequência é colapsada por codificação por comprimento de corrida, e o resultado é codificado por entropia com codificação de Huffman.
Esse estágio é completamente sem perdas e costuma responder pelo último grande fator de redução. Aqui nada degrada a imagem; é só empacotamento eficiente dos números que o passo anterior deixou.
05
Perda de geração: por que salvar de novo é corrosivo
Abra um JPEG, não mude nada, salve de novo, e o arquivo não é idêntico. Decodificar reconstrói pixels a partir de coeficientes quantizados; recodificar passa esses pixels reconstruídos pela DCT e quantiza outra vez. A segunda quantização arredonda números que já estavam arredondados, e o erro se acumula.
Uma geração extra em qualidade alta é quase indetectável. Dez são óbvias — esse é o mecanismo por trás de toda imagem que virou captura de tela, foi salva e recompartilhada até parecer que foi transmitida por fax.
A regra prática sai daí direto. Guarde o original. Edite a partir do original e não de uma cópia exportada. E quando um arquivo precisar ficar menor, redimensione antes de recodificar: reduzir as dimensões em pixels remove dados de forma limpa, enquanto baixar a qualidade sobre pixels em tamanho cheio os remove de forma destrutiva.
06
Quando o JPEG é a escolha errada
Tudo acima pressupõe conteúdo fotográfico: gradientes suaves, sem bordas duras, sem repetição exata. Dê ao JPEG o oposto e cada decisão de projeto trabalha contra você. Uma captura de tela, um logotipo, um gráfico, um desenho de linhas — são áreas chapadas grandes e limites nítidos, que é exatamente o conteúdo que a subamostragem de croma borra e a quantização enche de anéis.
O PNG foi feito para esse caso. Ele comprime sem perdas prevendo cada pixel a partir dos vizinhos e codificando a diferença, o que é espetacularmente eficaz em cor chapada e inútil em fotografias. É essa a regra inteira: tom contínuo vai para JPEG, cor chapada e bordas duras vão para PNG, e tudo o que precisa de transparência tem de ser PNG ou WEBP, porque o JPEG não tem canal alfa nenhum.