O jpegtran é um utilitário de linha de comando para transformação de arquivos de imagem JPEG, com o mínimo de perda de qualidade.
Nas distribuições Linux Debian 8.2 “Jessie” e no Ubuntu 16.04 LTS “Xenial Xerus” o pacote libjpeg-progs já se encontra instalado.
Se este não for o seu caso, é possível baixar e instalar o programa dos repositórios.
No Ubuntu ou em qualquer outra distro baseada no Debian, use o apt ou o apt-get para fazer a instalação:
sudo apt install libjpeg-progs
Como é possível ver (pelo nome do pacote), trata-se de um conjunto de programas:
- cjpeg/djpeg — converte arquivos de imagens de outros formatos (especialmente PNM e targa para JPEG e vice-versa
- rdjpgcom/wrjpgcom — lê/altera a sessão de comentários dentro dos arquivos JPEG
- jpegtran — transformação sem perda de arquivos JPEG
- jpegexiforient/exifautotran — manipula a tag de orientação da imagem, dentro do EXIF
No decorrer do texto, vou mostrar como otimizar suas imagens, fazendo uso do jpegtran.
Em seguida, vou mostrar como reduzir o peso de maneira mais significativa e eficiente com o uso da dupla djpeg e cjpeg.
Otimizar suas imagens, antes de fazer o upload, é fundamental para evitar que causem impacto negativo no tempo de carregamento.
A regra é nunca fazer upload de imagens sem tratamento pro seu site.
Este procedimento é fundamental para quem tem um site ou blog e deseja mantê-lo o mais enxuto e eficiente para carregar para seus leitores.
O que o jpegtran faz com suas imagens
O aplicativo executa várias transformações úteis em seus arquivos JPEG.
Ele pode traduzir a representação codificada de um tipo de JPEG para outro — por exemplo, pode transformar um arquivo comum para JPEG progressivo ou vice-versa.
O jpegtran pode alterar certos dados dos seus arquivos de imagem, como a sua orientação: de retrato para paisagem, por exemplo.
O programa trabalha rearranjando os dados comprimidos (DCT coefficients), sem precisar decodificar completamente a imagem — por isto, ele é capaz de fazer transformações sem perda de qualidade (lossless transformation).
Já, com o uso do djpeg (descompressão), seguido do cjpeg (compressão), para obter a mesma conversão, já vai ocorrer perda da qualidade na imagem.
Você vai encontrar mais informações sobre o uso do aplicativo no manual. Na linha de comando, é possível obter informações sobre como usar:
jpegtran -h
Exemplos de uso do jpegtran
Vamos ver alguns exemplos práticos de uso do aplicativo, que podem ser úteis no seu dia a dia.
Para converter uma imagem não-progressiva para progressiva, use os seguintes parâmetros:
jpegtran -progressive Mercedes-Benz-450SL-1980-by-Thomas-Bersy.jpg > Mercedes-optimized.jpg
No exemplo acima, o primeiro arquivo é o original e o segundo é o novo, criado com as novas alterações.
Use a opção ‘-optimize’, para otimizar seus arquivos:
jpegtran -verbose -optimize Mercedes-Benz-450SL-1980-by-Thomas-Bersy.jpg > Mercedes-optimized.jpg
Como acrescentei a opção ‘-verbose’, o programa mostra informações detalhadas do trabalho em execução:
libjpeg-turbo version 1.3.1 (build 20150308) Copyright (C) 1991-2012 Thomas G. Lane, Guido Vollbeding Copyright (C) 1999-2006 MIYASAKA Masaru Copyright (C) 2009 Pierre Ossman for Cendio AB Copyright (C) 2009-2014 D. R. Commander Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies) Emulating The Independent JPEG Group's software, version 6b 27-Mar-1998 Start of Image Miscellaneous marker 0xe1, length 22752 Define Quantization Table 0 precision 0 Define Quantization Table 1 precision 0 Define Huffman Table 0x00 Define Huffman Table 0x10 Define Huffman Table 0x01 Define Huffman Table 0x11 Start Of Frame 0xc0: width=3264, height=2448, components=3 Component 1: 2hx1v q=0 Component 2: 1hx1v q=1 Component 3: 1hx1v q=1 Start Of Scan: 3 components Component 1: dc=0 ac=0 Component 2: dc=1 ac=1 Component 3: dc=1 ac=1 Ss=0, Se=63, Ah=0, Al=0 End Of Image
Para ver se houve alteração no tamanho da imagem:
ls -l
Como você pode ver, abaixo, a redução no tamanho foi mínima:
total 5644 -rw-r--r-- 1 justincase justincase 2925612 Dez 7 11:32 Mercedes-Benz-450SL-1980-by-Thomas-Bersy.jpg -rw-r--r-- 1 justincase justincase 2849006 Dez 7 16:08 Mercedes-optimized.jpg
Para obter uma cópia em escala de cinza, use a opção ‘-grayscale’:
jpegtran -grayscale Mercedes-Benz-450SL-1980-by-Thomas-Bersy.jpg > Mercedes-optimized.jpg ls -l
Este tipo de medida costuma trazer resultados mais claros para reduzir o tamanho de um arquivo:
total 4896 -rw-r--r-- 1 justincase justincase 2925612 Dez 7 11:32 Mercedes-Benz-450SL-1980-by-Thomas-Bersy.jpg -rw-r--r-- 1 justincase justincase 2080959 Dez 7 16:38 Mercedes-optimized.jpg
Como obter redução significativa no tamanho do arquivo JPEG
Para obter uma redução maior da sua imagem, use a dupla djpeg/cjpeg para descomprimir e descomprimir novamente.
Funciona assim:
djpeg imagem_original.jpg > imagem_descomprimida.jpg cjpeg image_descomprimida.jpg > imagem_final.jpg _
Neste caso, vai haver perda da qualidade da imagem — mas é razoavelmente pequena. O ganho com a redução do tamanho é maior.
Na listagem, que segue, temos 4 exemplos de uma imagem:
ls -lh Mercedes* _ -rw-r--r-- 1 justincase justincase 2,8M Dez 7 11:32 Mercedes-Benz-450SL-1980-by-Thomas-Bersy.jpg -rw-r--r-- 1 justincase justincase 666K Dez 7 16:47 Mercedes-comprimido.jpg -rw-r--r-- 1 justincase justincase 23M Dez 7 16:46 Mercedes-descomprimido.jpg -rw-r--r-- 1 justincase justincase 2,8M Dez 7 16:45 Mercedes-optimized.jpg
- O primeiro arquivo é o original (2,8 Mb);
- o terceiro foi descomprimido a partir do original (23 Mb);
- o segundo foi comprimido a partir do terceiro (666 Kb) e
- o último foi apenas otimizado a partir do original.
Veja a imagem original:
… e a cópia comprimida:
Consegue perceber as diferenças entre as 2 imagens?
Se você ainda estiver insatisfeito com o tamanho do arquivo comprimido, é possível repetir o processo de descomprimir/comprimir e reduzir ainda mais o seu tamanho.
Referências
Crédito da imagem: Thomas Bersey.
2 replies on “Como otimizar imagens com o jpegtran”
As imagens publicadas como comparação são um link pro mesmo arquivo (https://elias.praciano.com/wp-content/uploads/2015/12/Mercedes-Benz-450SL-1980-by-Thomas-Bersy-1024×768.jpg).
=/
Tem razão! 😉
Já corrigi.