Existe uma qualidade, tamanho de arquivo ou outro benefício nos tamanhos JPEG serem múltiplos de 8px ou 16px?

StackOverflow https://stackoverflow.com/questions/74892

Pergunta

O processo de codificação de compactação JPEG divide uma determinada imagem em blocos de 8x8 pixels, trabalhando com esses blocos em futuras compressões com e sem perdas. [fonte]

Também é mencionado que se a imagem for um bloco múltiplo de 1MCU (definido como uma unidade mínima codificada, 'geralmente 16 pixels em ambas as direções'), alterações sem perdas em um JPEG podem ser realizadas. [fonte]

Estou trabalhando com imagens de produtos e gostaria de saber se e quanto benefício pode ser derivado do uso de múltiplos de 16 no tamanho final da minha imagem (digamos, usando uma imagem com tamanho de 480px por 360px) vs.um não múltiplo de 16 (como 484x362).Neste exemplo não estou interessado em mais alterações, edição ou recompressão da imagem final.

Para tentar chegar mais perto de uma resposta específica onde sei que deve haver generalidades:Dada uma imagem de 480x360 com 64k e salva com qualidade máxima no Photoshop [exemplo]:

  • Posso esperar alguma perda de qualidade de uma imagem de 484x362
  • Que quantidade de adição de tamanho de arquivo posso esperar (para este exemplo, o espaço adicional seria de pixels brancos)
  • Existem outras desvantagens em crescer além da grade de 8px?

Eu sei que é arbitrário usar esse exemplo específico, mas ainda assim seria útil (para mim e potencialmente para qualquer outra pessoa que esteja pensando no tamanho de uma imagem) entender com que nível de comprometimento eu estaria lidando ao quebrar a grade não-8px.

A questão principal aqui é um debate que tive sobre se as imagens divisíveis de 8 pixels têm qualidade superior às imagens que não são divisíveis por 8 pixels.

Foi útil?

Solução

8 pixels é o limite.A razão é porque as imagens JPEG são simplesmente uma matriz de blocos DCT 8x8;se a resolução da imagem não for mod8 em ambas as direções, o codificador deverá preencher os lados até a próxima resolução mod8.Na prática, isso não é muito caro;o que é muito pior são os casos em que uma imagem tem linhas pretas nítidas (como uma imagem em caixa de correio) que não ficam nos limites do bloco.Isto é especialmente problemático na codificação de vídeo.A razão para isso ser um problema é que a transformação de frequência de uma linha nítida é uma distribuição gaussiana de coeficientes – resultando em um enorme número de bits para codificar.

Para os curiosos, o método mais comum de preenchimento de bordas em intracompressão (como imagens JPEG) é espelhar as linhas de pixels antes da borda.Por exemplo, se você precisar preencher três linhas e a linha X for a borda, a linha X+1 será igual à linha X, a linha X+2 será igual à linha X-1 e a linha X+3 será igual à linha X- 2.Isto minimiza de forma bastante eficaz o custo nos coeficientes de transformação das linhas extras.

Na intercodificação, entretanto, os algoritmos de preenchimento geralmente simplesmente duplicam a última linha, porque o método de espelho não funciona bem para intercompressão, como na compactação de vídeo.

Outras dicas

Às vezes você precisa usar limites de 16 pixels em vez de 8 por causa da subamostragem;cada segundo pixel é descartado durante o processo de codificação, e esses blocos 8x8 DCT começaram como 16x16 e serão decodificados novamente para 16x16.Isso não será um problema nas configurações de qualidade mais altas.

As dimensões da imagem sendo múltiplos de 8 ou 16 não afetarão muito o tamanho do disco, mas você poderá obter economias drásticas se puder alinhar o conteúdo visual com a grade de 8x8 pixels, como se houvesse um padrão repetido ou textura na imagem.

Um JPG com tamanhos multiplicados por 8 também pode ser girado/invertido sem perda de qualidade.Por exemplo, gthumb pode fazer isso no Linux.

O que Tometzky disse.Se você não tiver o múltiplo correto, os algoritmos de inversão e rotação sem perdas não funcionarão.Isso ocorre porque o preenchimento à direita/inferior que pode ser ignorado com segurança agora termina na esquerda/superior, onde não pode.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top