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

  1. 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.
  2. 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.
  3. 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: jpegtran pode 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, jpegtran copia 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.
  4. 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.

Explore os formatos de arquivo e os recursos de compressão da Transloadit

Fontes

Transforme conhecimento sobre mídia em um pipeline funcional

Conecte uploads, processamento, IA, armazenamento e entrega por meio de uma única API declarativa, com o stack de codificação, o ajuste de escala e as constantes mudanças de formatos gerenciados para você.

Experimente a Transloadit gratuitamente