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

12

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

    
por neckTwi 03.07.2014 / 13:51

2 respostas

14

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

Nota: O SmartScale foi introduzido na versão 8 da biblioteca libjpeg, mas não é amplamente suportado pelos espectadores.

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

EDIT: Parece que a maioria dos espectadores não pode realmente exibir essas imagens, pois elas são baseadas no libjpeg-turbo. E o libjpeg-turbo escolheu não implementar este recurso . Na verdade, eu tentei alguns programas (no Ubuntu 14.04 e no Windows 8) e nenhum deles conseguiu exibir a imagem reduzida criada usando o jpegtrans. Mesmo o Photoshop, o IrfanView e o GIMP falharam.

EDIT 2: Na verdade, o Ubuntu e o Fedora nem mesmo enviam a biblioteca libjpeg8, mas a substituem completamente pela versão libjpeg-turbo. Portanto, nenhum dos programas poderá ler arquivos JPEG SmartScale, salvo por alguns binários que estão estaticamente vinculados à biblioteca libjpeg8 original.

    
por 03.07.2014 / 14:42
3

A resposta curta é não. Uma imagem JPEG usa compressã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 recompressão, uma vez que o JPEG usa compactação com perdas, mas você está perdendo qualidade de qualquer maneira, aquartelando a resolução. Você pode obter a melhor qualidade possível a partir da imagem de baixa resolução, aumentando o nível de qualidade JPEG ao recompactar, embora isso, obviamente, aumente o tamanho do arquivo.

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

    
por 03.07.2014 / 14:31

Tags