Verifique a integridade de imagens JPG com o jpeginfo

O jpeginfo pode ajudar a verificar automaticamente a integridade de uma quantidade enorme de imagens, em seu sistema Linux.
Trata-se de um pequeno utilitário de linha de comando (CLI), flexível, rápido e eficiente.
linux jpeginfo
Posso usar o jpeginfo para checar um único arquivo de imagem ou centenas deles.
Como, para um trabalho desta natureza, você quer resultados rápidos, as ferramentas CLI são a melhor opção — por que conseguem mostrar os resultados que você deseja, com o menor consumo possível de recursos do sistema.

Como instalar o jpeginfo

No Debian e no Ubuntu, ele pode ser instalado, com o apt:

sudo apt install jpeginfo
 _

Trata-se de um programa muito pequeno, que não vai pesar no sistema — caso você se preocupe com estes detalhes. Além disto, sempre é possível removê-lo, depois de realizar o seu trabalho.
Se estiver curioso, você pode conferir o tamanho dele com a opção ‘show’ do apt:

apt show jpeginfo | grep -i size

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

Installed-Size: 25,6 kB
Download-Size: 13,2 kB
 _

Ele pode ser instalado em questão de segundos, como você pode ver.

O tamanho do jpeginfo, após a instalação, é aproximadamente 25 Kb.

Como verificar a integridade das minhas fotos?

Como eu disse, dá pra verificar apenas uma imagem, assim:

jpeginfo --check System76-System76_Brandmark_Blue-by_Kate_Hazen_of_System76.jpg 
 _

O texto “[OK]”, ao final das informações básicas do arquivo, indica que está tudo bem com ele:

System76-System76_Brandmark_Blue-by_Kate_Hazen_of_System76.jpg 2560 x 1440 24bit JFIF  P  985882  [OK]
 _
jpeginfo --check foto-danificada.jpg
 _

… ou você pode obter uma indicação de que há “[ERROR]”:

foto-danificada.jpg  Not a JPEG file: starts with 0x5c 0x6e  [ERROR]
 _

Você pode pedir para verificar todas as imagens do diretório corrente, com o uso de curingas:

jpeginfo --check *.jpg
 _
foto-danificada.jpg  Not a JPEG file: starts with 0x5c 0x6e  [ERROR]
System76-Old_Man_Smoked_His_Pipe-by_Ian_Hex_of_LightSweep.jpg 2560 x 1440 24bit JFIF  P 3768044  [OK]
System76-System76_Brandmark_Blue-by_Kate_Hazen_of_System76.jpg 2560 x 1440 24bit JFIF  P  985882  [OK]
System76-System76_Brandmark_Gray-by_Kate_Hazen_of_System76.jpg 2560 x 1440 24bit JFIF  P  824133  [OK]
System76-System76_Brandmark_Yellow-by_Kate_Hazen_of_System76.jpg 2560 x 1440 24bit JFIF  P  952200  [OK]
System76-System76_Logo_Blue-by_Kate_Hazen_of_System76.jpg 2560 x 1440 24bit JFIF  P  974983  [OK]
System76-System76_Logo_Gray-by_Kate_Hazen_of_System76.jpg 2560 x 1440 24bit JFIF  P  731859  [OK]
System76-System76_Logo_Yellow-by_Kate_Hazen_of_System76.jpg 2560 x 1440 24bit JFIF  P  943715  [OK]
 _

Observe que as informações, na listagem normal, vêm em colunas:

  1. nome do arquivo
  2. resolução da imagem
  3. profundidade das cores
  4. padrão do arquivo de imagem
  5. padrão da decodificação (progressiva, interpolada etc.)
  6. Tamanho, em bytes

Na última coluna, o resultado do teste.

A sigla JFIF, que aparece na lista acima, significa JPEG File Interchange Format. Trata-se do formato padrão do arquivo da imagem.
Este formato é compatível com o padrão JPEG Interchange Format (JIF) e resolve algumas de suas limitações de codificação.
Tal como todos os arquivos JIF, os dados contidos em imagens JFIF comprimidos com o uso de técnicas no padrão JPEG, uma vez que as imagens JFIF são comumente chamadas “JPEG/JFIF”.

Use a opção ‘–lsstyle’, para ver o resultado organizado de outra forma:

jpeginfo --check --lsstyle *.jpg
 Not a JPEG file: starts with 0x5c 0x6e  foto-danificada.jpg [ERROR]
2560 x 1440 24bit JFIF  P 3768044 System76-Old_Man_Smoked_His_Pipe-by_Ian_Hex_of_LightSweep.jpg  [OK]
2560 x 1440 24bit JFIF  P  985882 System76-System76_Brandmark_Blue-by_Kate_Hazen_of_System76.jpg  [OK]
2560 x 1440 24bit JFIF  P  824133 System76-System76_Brandmark_Gray-by_Kate_Hazen_of_System76.jpg  [OK]
2560 x 1440 24bit JFIF  P  952200 System76-System76_Brandmark_Yellow-by_Kate_Hazen_of_System76.jpg  [OK]
2560 x 1440 24bit JFIF  P  974983 System76-System76_Logo_Blue-by_Kate_Hazen_of_System76.jpg  [OK]
2560 x 1440 24bit JFIF  P  731859 System76-System76_Logo_Gray-by_Kate_Hazen_of_System76.jpg  [OK]
2560 x 1440 24bit JFIF  P  943715 System76-System76_Logo_Yellow-by_Kate_Hazen_of_System76.jpg  [OK]
_

Use o comando grep, para ver apenas os resultados que retornaram erro:

jpeginfo --check --lsstyle *.jpg | grep -i error
_
 Not a JPEG file: starts with 0x5c 0x6e  foto-danificada.jpg [ERROR]
_

Use a opção ‘–delete’, para remover automaticamente todos os arquivos que forem encontrados com erros:

jpeginfo --delete *.jpg
_

Use a opção ‘–info’, para obter mais detalhes nas informações sobre cada arquivo:

jpeginfo --info *.jpg
_
System76-Old_Man_Smoked_His_Pipe-by_Ian_Hex_of_LightSweep.jpg 2560 x 1440 24bit JFIF  Progressive Huffman,300dpi 3768044 
System76-System76_Brandmark_Blue-by_Kate_Hazen_of_System76.jpg 2560 x 1440 24bit JFIF  Progressive Huffman,150dpi  985882 
System76-System76_Brandmark_Gray-by_Kate_Hazen_of_System76.jpg 2560 x 1440 24bit JFIF  Progressive Huffman,150dpi  824133 
System76-System76_Brandmark_Yellow-by_Kate_Hazen_of_System76.jpg 2560 x 1440 24bit JFIF  Progressive Huffman,150dpi  952200 
System76-System76_Logo_Blue-by_Kate_Hazen_of_System76.jpg 2560 x 1440 24bit JFIF  Progressive Huffman,150dpi  974983 
System76-System76_Logo_Gray-by_Kate_Hazen_of_System76.jpg 2560 x 1440 24bit JFIF  Progressive Huffman,150dpi  731859 
System76-System76_Logo_Yellow-by_Kate_Hazen_of_System76.jpg 2560 x 1440 24bit JFIF  Progressive Huffman,150dpi  943715 
_

Calcule a soma MD5, ou MD5 checksum, com a opção ‘–md5’:

jpeginfo --md5 *.jpg
_
System76-Old_Man_Smoked_His_Pipe-by_Ian_Hex_of_LightSweep.jpg 2560 x 1440 24bit JFIF  P 3768044 f45c6abe65faff92c753ca24ec5f8152 
System76-System76_Brandmark_Blue-by_Kate_Hazen_of_System76.jpg 2560 x 1440 24bit JFIF  P  985882 3fc69c0484860c02b21cb6582067c28b 
System76-System76_Brandmark_Gray-by_Kate_Hazen_of_System76.jpg 2560 x 1440 24bit JFIF  P  824133 3406d52789e7a79cf9efc76135416cf4 
System76-System76_Brandmark_Yellow-by_Kate_Hazen_of_System76.jpg 2560 x 1440 24bit JFIF  P  952200 bb1cd2cd03730e8e56d5876c6638de47 
System76-System76_Logo_Blue-by_Kate_Hazen_of_System76.jpg 2560 x 1440 24bit JFIF  P  974983 dc2e914b26c91dceb745baab1dd677aa 
System76-System76_Logo_Gray-by_Kate_Hazen_of_System76.jpg 2560 x 1440 24bit JFIF  P  731859 9efd7ded3aceb671a708bac28a7aeb6a 
System76-System76_Logo_Yellow-by_Kate_Hazen_of_System76.jpg 2560 x 1440 24bit JFIF  P  943715 30ee050e0c5d14b7c9c6f44b7df2fff4
_

Fazer o cálculo da soma MD5, é útil para quem vai fazer a transmissão de uma grande quantidade de arquivos de imagem e deseja obter uma checagem, no final, de que a transferência ocorrem sem incidentes.
Como você já deve ter percebido, pode combinar várias opções na mesma linha.
Para saber mais sobre o jpeginfo, use a opção ‘–help’ ou consulte o manual do sistema: man jpeginfo.

Publicado por

Elias Praciano

Autor de tecnologia (livre, de preferência), desenvolvedor web e geek, nos mais diversos assuntos. Entusiasta de software livre e hacker de LEGO, acredito em repassar meu conhecimento e ajudar as pessoas sempre que for possível.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *