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.