Pular para o conteúdo
PDFLove

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.

Perguntas

Perguntas relacionadas

Por que o texto fica ruim num JPEG?

Dois mecanismos se somam. A subamostragem de croma corta a resolução de cor pela metade antes de qualquer outra coisa, e a quantização descarta os coeficientes de alta frequência de que uma borda nítida é feita. Texto é só borda nítida, então leva os dois — franjas coloridas e uma ondulação em volta de cada letra.

O que o número de qualidade do JPEG significa de verdade?

Ele seleciona uma tabela de quantização. Qualidade mais alta divide os coeficientes por números menores, então menos deles são arredondados a zero e mais detalhe sobrevive. Não é porcentagem de nada, e é por isso que a diferença entre 100 e 90 é desprezível e a diferença entre 60 e 50 não é.

Dá para recuperar a qualidade de um JPEG comprimido demais?

Não. A quantização arredonda coeficientes a zero e não há registro do que eles eram. Salvar depois em qualidade 100 produz um arquivo maior com exatamente o mesmo estrago.

O WEBP é só um JPEG melhor?

Para fotografias com perdas ele fica de 25 a 35% menor em qualidade equivalente, e ainda faz sem perdas e transparência, o que o JPEG não faz. O problema é a aceitação: muitos formulários de upload e programas antigos ainda só aceitam JPEG e PNG.