Podemos alterar o tamanho de uma imagem JPEG sem decodificá-la e recodificá-la?

Podemos alterar o tamanho de uma imagem JPEG sem decodificá-la e recodificá-la?

Quero converter uma imagem JPEG de 640x480 em 320x240. Eu sei que isso pode ser feito decodificando a imagem JPEG em YCbCr bruto, dimensionando-a e codificando-a novamente em JPEG. Mas é possível com a codificação JPEG dimensionar diretamente a imagem sem decodificação?

Responder1

Você pode, mas somente se o seu visualizador JPEG suportar oEscala inteligenteExtensão JPEG.jpegtranpodemos fazer isso para tamanhos N/8, com N=1..16. Basicamente, o tamanho do bloco DCT é alterado de 8x8 para outro durante a recompressão (por exemplo, 4x4), o que efetivamente dimensiona a imagem.

Nota: SmartScale foi introduzido emversão 8da biblioteca libjpeg, mas não é amplamente suportada pelos visualizadores.

Um documento descrevendo as mudanças em detalhes pode ser encontrado aqui:Evolução do JPEG.

EDITAR:Parece que a maioria dos visualizadores não consegue exibir essas imagens, pois elas são baseadas em libjpeg-turbo. E libjpeg-turbooptou por não implementar esse recurso. Na verdade, tentei alguns programas (no Ubuntu 14.04 e no Windows 8) e nenhum conseguiu exibir a imagem reduzida criada usando jpegtrans. Até o Photoshop, IrfanView e GIMP falharam.

EDITAR 2:Na verdade, o Ubuntu e o Fedora nem sequer enviam a biblioteca libjpeg8, mas a substituem completamente pela versão libjpeg-turbo. Portanto, nenhum dos programas será capaz de ler arquivos JPEG SmartScale, exceto alguns binários que estão estaticamente vinculados à biblioteca libjpeg8 original.

Responder2

A resposta curta é não. Uma imagem JPEG usa compactação, o que significa que cada byte de saída depende de todos os outros. Se você alterar o número de bytes da imagem, deverá descompactar e recompactar.

Haverá uma perda de qualidade como resultado da recompactação, já que o JPEG usa compactação com perdas, mas você está perdendo qualidade de qualquer maneira ao dividir a resolução em quatro. Você pode obter a melhor qualidade possível da imagem de baixa resolução aumentando o nível de qualidade JPEG durante a recompactação, embora isso obviamente aumente o tamanho do arquivo.

Se você trabalha muito com imagens, é melhor trabalhar em um formato de compactação sem perdas, como PNG, convertendo para JPEG somente quando as imagens forem finalizadas, desde que você tenha espaço extra em disco.

informação relacionada