Alguém conhece uma maneira de verificar arquivos gráficos (particularmente JPEG, GIF e PNG) quanto à corrupção (de preferência de maneira automatizada)?
Explicação:
Alguns dias atrás, um comando funcionou incorretamente e acabou excluindo milhares de arquivos gráficos de um volume FAT32 que estava praticamente sem espaço. Eu usei vários programas diferentes de recuperação de arquivos / fotos, mas naturalmente eles são limitados em quanto podem recuperar (embora, felizmente, o volume tenha clusters de 8 KB, o que ajuda um pouco).
De qualquer forma, alguns dos arquivos maiores, que foram fragmentados, agora estão corrompidos. Alguns deles nem sequer são arquivos reais (o software de recuperação simplesmente descartou os clusters apontados pelas entradas de diretório agora sobrescritas), enquanto outros foram danificados por causa da fragmentação.
Além disso, como alguns formatos de imagem incorporam uma versão menor da imagem como miniatura, a digitalização das miniaturas não é confiável, pois pode estar intacta enquanto o arquivo real (ou seja, a imagem quando vista em tamanho real) pode estar corrompido.
Aqui estão alguns exemplos:
Aqui está o segundo. Está tão danificado que não exibe nada.
(Um terceiro nem faria upload porque nem sequer tem o cabeçalho correto!)
fonte
Respostas:
Como me deparei com isso enquanto tentava responder à mesma pergunta, adicionarei outra ótima solução que encontrei:
Bad Peggy
Uso
No menu, selecione
File > Scan
e use a caixa de diálogo de arquivo para procurar a pasta na qual as imagens estão localizadas. O programa começará a digitalizar a pasta e todas as subpastas em busca de imagens (.jpg, .png, .bmp, .gif). Se você quiser digitalizar muitas fotos, isso levará algum tempo, porque o programa precisa carregar e analisar completamente o arquivo de imagem; portanto, você pode deixá-lo em execução durante a noite.Enquanto estiver digitalizando, mostrará uma porcentagem de progresso na barra de status. Quaisquer imagens que não sejam perfeitas serão exibidas diretamente na lista. Se você clicar em qualquer imagem da lista, ela exibirá uma prévia da aparência da imagem. Frequentemente, uma imagem apresenta apenas um pequeno problema com o formato do arquivo e a imagem ainda fica bem. Outras vezes, a imagem não será renderizada e a visualização será apenas preta. Às vezes, a imagem é danificada e você verá algo como na captura de tela acima.
Um truque muito útil é clicar no cabeçalho da coluna
Reason
e as imagens serão classificadas de acordo com o grau de danificação (por exemplo, todos os formatos de arquivo incorretos que ainda são renderizados corretamente serão movidos para o fundo, permitindo que você se concentre nos casos mais graves) .Além disso, se a primeira verificação terminar e você iniciar outra verificação, os resultados serão simplesmente adicionados à lista. Portanto, se você tiver muitas pastas diferentes com imagens, poderá digitalizá-las seqüencialmente, sem que a lista seja limpa ao iniciar uma nova digitalização. Se você deseja que a lista seja limpa, use o menu de contexto e clique em
Clear list
.Links
para Windows, Linux e OS X podem ser encontrados aqui:
https://www.coderslagoon.com
O código fonte está aqui:
https://github.com/llaith/BadPeggy
fonte
Experimente a opção jpeginfo '
-c
' para seus arquivos JPEG.Vi a corrupção que você mostra acontecer com cartões de memória ruins também.
O que você deseja deve estar disponível e disponível, marque Corrupção de arquivos gráficos ;
uma seção da Enciclopédia on-line de formatos de arquivos gráficos .
Consulte também Verificações de integridade de arquivo em Uma introdução básica aos recursos PNG .
Você pode estar interessado nesta pergunta do Stackoverflow:
Como verifico programaticamente se uma imagem (PNG, JPEG ou GIF) está corrompida ?
Atualização : Tarball de origem para a versão 1.6.1 por Timo Kokkonen .
Você deve conseguir construir um binário para sua máquina.
fonte
jpeginfo -c *.JPG | ag (WARNING|ERROR)
trabalhou para mimO programa de identificação do ImageMagick informará se uma imagem está corrompida. Um teste de loop 'for i in find' para um código de retorno zero-zero do identificador deixaria você fazer o script com bastante facilidade para despejar uma lista de arquivos danificados ou corrompidos. Também funciona no Windows com o PowerShell.
O código a seguir com alterações para o seu caminho funciona bem no PowerShell
fonte
identify
pode mostrar dados JPEG corrompidos com-verbose
, normalmente não é exibido.Isso pode ser feito usando o comando da Python Imaging Library
.verify()
. [1]Para executar isso no Windows, instale o Python (instalei a versão atual mais recente do Python 2) e instale o Pillow (uma bifurcação da Python Imaging Library (PIL)). Em seguida, copie o código de jpeg_corrupt.py [2] e salve seu conteúdo em um arquivo .PY, por exemplo, jpeg_corrupt.py.
Observe que eu alterei a seguinte linha de código em jpeg_corrupt.py :
self.globs = ['*.jpg', '*.jpe', '*.jpeg']
para
self.globs = ['*.jpg', '*.jpe', '*.jpeg', '*.png', '*.gif']
Isso, para que os arquivos .PNG e .GIF também sejam verificados.
Em seguida, ele pode ser executado através do prompt de comando do Windows (cmd.exe), desta forma:
C:\Python27\python.exe "C:\Directory containing the .PY file\jpeg_corrupt.py" "C:\Directory of folder to be scanned"
A primeira parte do comando, ' C: \ Python27 \ python.exe ', pode ser diferente dependendo da versão do Python que você instalou e em qual diretório o instalou. No meu exemplo, é o diretório de instalação padrão do Python 2.7.
Ele deve verificar todas as imagens JPG, GIF e PNG no diretório especificado e todos os seus subdiretórios. Ele mostrará uma saída se detectar um arquivo de imagem corrompido.
Eu corri isso em imagem de amostra do OP e deu esta mensagem de erro:
...\YcB9n.png: string index out of range
.O código também pode ser inserido em um arquivo de script .BAT, para que você possa executá-lo facilmente em um diretório especificado sem precisar usar o prompt de comando:
Fontes:
[1]: Resposta no estouro de pilha - "Como verifico programaticamente se uma imagem (PNG, JPEG ou GIF) está corrompida?" por ChristopheD
[2]: Comentário de Denilson Sá na resposta ao SO vinculada em [1]
fonte
Modifiquei o código da resposta do galacticninja para fazer exatamente o que o OP queria. É executado da mesma maneira, no entanto, moverá os arquivos para uma pasta catch no
C:\
diretório raiz , em vez de apenas listar as imagens no prompt de comando.Você pode encontrar meu código modificado em Pastebin ou abaixo:
fonte
Instale o imagemagick, se você estiver no Mac, poderá usar o Homebrew.
Então você pode usar esse pequeno script Python.
Substitua
/Your/Path/To/Files/
e remova o comentário da última linha se desejar excluir as imagens corrompidas.fonte
Use
identify
do pacote ImageMagick.Exemplo de exemplo:
E o comando a seguir identificaria todos os arquivos JPEG corrompidos na pasta atual:
fonte
Se você tiver o Perl instalado, poderá usar este script. Você precisa salvar a lista de arquivos para fazer check-in f.txt antes de executar o script. Você pode fazer essa lista usando o Irfanview. (carregue todos os polegares das subpastas e salve em txt). A lista de arquivos bons é salva em okf.txt e os arquivos corrompidos são listados em brokenf.txt.
=====================
fonte
Meu script Pyhton de código aberto, check-media-integridade, verifica a integridade de imagens e arquivos de vídeo / áudio. Ele usa módulos Pillow, ImageMagick e FFmpeg wrappers para tentar decodificar os arquivos.
O travesseiro image.verify não vê todos os defeitos (por exemplo, ignora o truncamento) por esse motivo, também realizei imagem / decodificação + manipulação.
fonte
Esta postagem do blog lista cinco ferramentas que podem (detectar e) reparar arquivos de imagem corrompidos. O único gratuito entre eles é o File Repair 2.1.
fonte