O que é JPEG?
JPEG é um método de compressão com perdas amplamente compatível para fotografias raster e outras imagens de tons contínuos. A qualidade da compressão é ajustável, mas a codificação JPEG comum não oferece transparência.
Como JPEG funciona
O processo JPEG comum divide cada componente de cor em blocos de 8×8, aplica uma transformada discreta de cosseno a cada bloco, divide os coeficientes resultantes por valores de uma tabela de quantização, arredonda os resultados para números inteiros e os codifica por entropia. A quantização é a etapa que descarta detalhes: tabelas com quantização mais grosseira reduzem o arquivo à custa de erros visíveis, principalmente desfoque e franjas de cor ao redor de textos e bordas nítidas. Os codificadores também costumam armazenar os dois componentes de croma com resolução reduzida, o que constitui uma segunda fonte de perda, separada da primeira. A norma JPEG define os dados comprimidos e sua sintaxe de marcadores, mas deixa o espaço de cor e outras informações da aplicação fora do escopo. Por isso, os arquivos costumam seguir uma convenção como JFIF ou Exif e podem conter um perfil ICC e metadados descritivos em segmentos de aplicação.
Informações essenciais
- Um número de qualidade é uma convenção do codificador, não parte da norma JPEG: a norma não especifica tabelas de quantização padrão, e codificadores no estilo libjpeg mapeiam um valor de 0–100 para tabelas ajustadas, portanto o mesmo número não necessariamente produz o mesmo resultado em outro codificador. A qualidade 100 não é sem perdas. No libjpeg-turbo, ela minimiza a perda por quantização, mas a subamostragem de croma e o arredondamento ainda descartam informações, e os arquivos crescem acentuadamente acima de aproximadamente 95, com pouco ganho visível.
- O JPEG baseline é o processo sequencial de 8 bits com codificação Huffman que todo decodificador baseado em DCT deve suportar, e codifica cada componente em uma única varredura. O JPEG progressivo armazena os mesmos coeficientes quantizados em várias varreduras, permitindo que um decodificador mostre cedo uma versão pouco detalhada da imagem inteira e depois a refine. A imagem final é idêntica à sequencial com as mesmas configurações, e o arquivo tem aproximadamente o mesmo tamanho, mas a decodificação exige um buffer de coeficientes para a imagem inteira.
- Cada ciclo de decodificação e recodificação realiza uma nova quantização, portanto as perdas se acumulam a cada gravação; quando os pixels precisarem mudar, recodifique a partir do original, em vez de uma saída anterior. Ferramentas que trabalham com os coeficientes armazenados evitam esse ciclo:
jpegtranpode alternar entre baseline e progressivo, espelhar uma imagem ou girá-la em incrementos de 90° sem degradá-la. Há duas limitações. Essas ferramentas não podem alterar a qualidade, e um espelhamento ou uma rotação pode deixar uma faixa da borda sem transformação, ou recortá-la se isso for solicitado, quando a largura ou a altura relevante não for múltipla do tamanho da iMCU (unidade mínima codificada intercalada); a dimensão relevante depende da transformação. Essa unidade depende da subamostragem de croma em uso e costuma ter 8 ou 16 pixels, portanto dimensões divisíveis por 8 nem sempre são suficientes. Os metadados são uma questão separada: por padrão,jpegtrancopia comentários e descarta outros metadados, como dados Exif e um perfil ICC, a menos que receba uma instrução para mantê-los. O texto dos comentários fica em seu próprio segmento de marcador e não interfere nos dados da imagem, portanto adicioná-lo ou substituí-lo também não exige recodificação. - A norma JPEG também define um modo sem perdas, mas ele é um processo separado, sem DCT, que muitos decodificadores não conseguem ler. Quando for necessário preservar os pixels exatamente ou manter a transparência, use um formato como PNG; JPEG não tem canal alfa.
Quando JPEG é importante
Escolha JPEG quando a ampla compatibilidade e o tamanho reduzido dos arquivos fotográficos forem mais importantes do que a preservação exata dos pixels. A codificação repetida ou a compressão agressiva pode introduzir artefatos de blocos, oscilações ao redor de bordas e perda de detalhes.
Como a Transloadit ajuda com JPEG
O Robot /image/resize da Transloadit grava JPEG quando format está definido como jpg, com um parâmetro quality para o nível de compressão, uma opção progressive e strip para remover metadados. A saída JPEG não pode manter a transparência e, por padrão, o Robot substitui o fundo de imagens transparentes pela cor definida em background. O Robot /image/optimize reduz o tamanho de arquivos JPEG existentes e pode manter ou descartar seus metadados.
- Robot de redimensionamento de imagens: format, quality, progressive e background
- Robot de otimização de imagens
- Formatos de imagem compatíveis
Explore os formatos de arquivo e os recursos de compressão da Transloadit
Fontes
- CCITT Rec. T.81 | ISO/IEC 10918-1: compressão e codificação digital de imagens estáticas de tons contínuos
- libjpeg-turbo usage.txt: qualidade e modo progressivo do cjpeg e transformações sem perdas do jpegtran
- libjpeg-turbo: uso da biblioteca JPEG do IJG (espaços de cor, marcadores, uso de memória)
- MDN: guia de tipos e formatos de arquivos de imagem (JPEG)