Kennt jemand eine Möglichkeit, Grafikdateien (insbesondere JPEG, GIF und PNG) (vorzugsweise automatisiert) auf Beschädigung zu überprüfen?
Erläuterung:
Vor einigen Tagen funktionierte ein Befehl nicht ordnungsgemäß und löschte schließlich Tausende von Grafikdateien von einem FAT32-Volume, auf dem praktisch nicht genügend Speicherplatz vorhanden war. Ich habe mehrere verschiedene Datei- / Foto-Wiederherstellungsprogramme verwendet, aber natürlich sind sie in ihrer Wiederherstellungsrate begrenzt (obwohl das Volume zum Glück 8-KB-Cluster hat, was ein wenig hilft).
Auf jeden Fall sind einige der größeren Dateien, die fragmentiert wurden, jetzt beschädigt. Einige von ihnen sind überhaupt keine echten Dateien (die Wiederherstellungssoftware hat lediglich die Cluster gesichert, auf die durch jetzt überschriebene Verzeichniseinträge verwiesen wurde), während andere aufgrund von Fragmentierung beschädigt sind.
Da in einigen Bildformaten eine kleinere Version des Bildes als Miniaturbild eingebettet ist, ist das Durchsuchen der Miniaturbilder auf Beschädigung nicht zuverlässig, da sie möglicherweise intakt sind, während die eigentliche Datei (dh das Bild in voller Größe) beschädigt sein kann.
Hier einige Beispiele:
Hier ist der zweite. Es ist so beschädigt, dass es nichts anzeigt.
(Ein dritter würde nicht einmal hochladen, weil er nicht einmal den richtigen Header hat!)
quelle
Antworten:
Da ich darauf gestoßen bin, während ich versucht habe, die gleiche Frage zu beantworten, füge ich eine weitere großartige Lösung hinzu, die ich gefunden habe:
Schlechte Peggy
Verwendung Wählen
Sie im Menü die Option
File > Scan
und navigieren Sie im Dateidialog zu dem Ordner, in dem sich die Bilder befinden. Das Programm scannt dann den Ordner und alle Unterordner nach Bildern (.jpg, .png, .bmp, .gif). Wenn Sie viele Bilder scannen möchten, dauert dies einige Zeit, da das Programm die Bilddatei vollständig laden und analysieren muss, sodass Sie sie möglicherweise über Nacht laufen lassen möchten.Während des Scannens wird ein Prozentsatz des Fortschritts in der Statusleiste angezeigt. Alle Bilder, die nicht perfekt sind, werden direkt in der Liste angezeigt. Wenn Sie auf ein Bild in der Liste klicken, wird eine Vorschau des Bildes angezeigt. Sehr oft hat ein Bild nur ein kleines Problem mit dem Dateiformat, und das Bild sieht trotzdem gut aus. In anderen Fällen wird das Bild überhaupt nicht gerendert und die Vorschau ist nur schwarz. Manchmal ist das Bild beschädigt und Sie sehen so etwas wie auf dem Screenshot oben.
Ein sehr praktischer Trick ist das Anklicken der Spaltenüberschrift.
Reason
Die Bilder werden danach sortiert, wie stark sie beschädigt sind. .Auch wenn der erste Scan abgeschlossen ist und Sie einen weiteren Scan starten, werden die Ergebnisse einfach zur Liste hinzugefügt. Wenn Sie also viele verschiedene Ordner mit Bildern haben, können Sie diese einfach nacheinander scannen, ohne dass die Liste gelöscht wird, wenn Sie einen neuen Scan starten. Wenn Sie möchten, dass die Liste gelöscht wird, verwenden Sie das Kontextmenü und klicken Sie auf
Clear list
.Links
Downloads für Windows, Linux und OS X finden Sie hier:
https://www.coderslagoon.com
Der Quellcode ist hier:
https://github.com/llaith/BadPeggy
quelle
Probieren Sie die Option jpeginfo '
-c
' für Ihre JPEG-Dateien aus.Ich habe gesehen, dass die Korruption, die Sie zeigen, auch bei fehlerhaften Speicherkarten auftritt.
Was Sie wollen, sollte möglich und verfügbar sein, überprüfen Sie die Korruption der Grafikdateien ;
Ein Abschnitt aus der Online- Enzyklopädie der Grafikdateiformate .
Siehe auch Dateiintegritätsprüfungen in einer grundlegenden Einführung in PNG- Funktionen .
Diese Frage zum Stapelüberlauf könnte Sie interessieren:
Wie überprüfe ich programmgesteuert, ob ein Bild (PNG, JPEG oder GIF) beschädigt ist ?
Update : Quell-Tarball für Version 1.6.1 von Timo Kokkonen .
Sie sollten in der Lage sein, eine Binärdatei für Ihren Computer zu erstellen.
quelle
jpeginfo -c *.JPG | ag (WARNING|ERROR)
arbeitete für michDas Identifizierungsprogramm von ImageMagick zeigt an , ob ein Bild beschädigt ist. Mit einer 'for i in find'-Schleife, die auf einen Rückgabewert ohne 0 von' identity 'testet, können Sie den Test ziemlich einfach mit einem Skript ausführen, um eine Liste beschädigter oder beschädigter Dateien zu sichern. Es funktioniert auch unter Windows mit PowerShell.
Der folgende Code mit Änderungen für Ihren Pfad funktioniert gut in Powershell
quelle
identify
können beschädigte JPEG-Daten mit angezeigt werden-verbose
, normalerweise wird dies nicht angezeigt.Dies kann mit dem Befehl der Python Imaging-Bibliothek erfolgen
.verify()
. [1]Um dies unter Windows auszuführen, installieren Sie Python (ich habe die aktuellste Version von Python 2 installiert) und anschließend Pillow (eine Abzweigung der Python Imaging Library (PIL)). Kopieren Sie dann den Code von jpeg_corrupt.py [2] und speichern Sie den Inhalt in einer .PY-Datei, z. B. jpeg_corrupt.py.
Beachten Sie, dass ich die folgende Codezeile in jpeg_corrupt.py geändert habe :
self.globs = ['*.jpg', '*.jpe', '*.jpeg']
in
self.globs = ['*.jpg', '*.jpe', '*.jpeg', '*.png', '*.gif']
Dies, damit auch PNG- und GIF-Dateien gescannt werden.
Es kann dann über die Windows-Eingabeaufforderung (cmd.exe) wie folgt ausgeführt werden:
C:\Python27\python.exe "C:\Directory containing the .PY file\jpeg_corrupt.py" "C:\Directory of folder to be scanned"
Der erste Teil des Befehls " C: \ Python27 \ python.exe " kann je nach der installierten Version von Python und dem Verzeichnis, in dem Sie es installiert haben, unterschiedlich sein. In meinem Beispiel ist dies das Standardinstallationsverzeichnis von Python 2.7.
Es sollte alle JPG-, GIF- und PNG-Bilder im angegebenen Verzeichnis und in allen seinen Unterverzeichnissen scannen. Es wird eine Ausgabe angezeigt, wenn eine beschädigte Bilddatei erkannt wird.
Ich lief dies auf OP der Probe Bild und es gab diese Fehlermeldung:
...\YcB9n.png: string index out of range
.Der Code könnte auch in eine .BAT-Skriptdatei eingegeben werden, sodass Sie ihn problemlos in einem angegebenen Verzeichnis ausführen können, ohne die Eingabeaufforderung verwenden zu müssen:
Quellen:
[1]: Antwort im Stapelüberlauf - "Wie überprüfe ich programmgesteuert, ob ein Bild (PNG, JPEG oder GIF) beschädigt ist?" von ChristopheD
[2]: Kommentar von Denilson Sá in der SO-Antwort in [1]
quelle
Ich habe den Code von galacticninjas Antwort geändert , um genau das zu tun, was OP wollte. Es wird auf die gleiche Weise ausgeführt, jedoch werden die Dateien in einen Catch-Ordner im Stammverzeichnis verschoben,
C:\
anstatt nur die Bilder an der Eingabeaufforderung aufzulisten.Sie finden meinen geänderten Code in Pastebin oder unten:
quelle
Installieren Sie imagemagick. Wenn Sie auf einem Mac arbeiten, können Sie Homebrew verwenden.
Dann können Sie dieses kleine Python-Skript verwenden.
Ersetzen Sie
/Your/Path/To/Files/
die letzte Zeile und entfernen Sie das Kommentarzeichen, wenn Sie die beschädigten Bilder löschen möchten.quelle
Verwendung
identify
aus dem ImageMagick-Paket.Beispielbeispiel:
Mit dem folgenden Befehl werden alle beschädigten JPEG-Dateien im aktuellen Ordner identifiziert:
quelle
Wenn Sie Perl installiert haben, können Sie dieses Skript verwenden. Sie müssen die Liste der Dateien speichern, um f.txt einzuchecken, bevor Sie das Skript ausführen. Sie können diese Liste mit Irfanview erstellen. (lade alle Thumbnails aus den Unterordnern und speichere sie in txt). Die Liste der fehlerfreien Dateien wird in okf.txt gespeichert und beschädigte Dateien in brokenf.txt.
====================
quelle
Meine Open-Source-Pyhton-Skriptprüfung überprüft die Integrität von Bildern und Video- / Audiodateien. Es verwendet Pillow-Module, ImageMagick- und FFmpeg-Wrapper, um die Dateien zu dekodieren.
Pillow image.verify sieht nicht alle Fehler (ignoriert zB das Abschneiden). Aus diesem Grund habe ich auch Image / Decode + Manipulation durchgeführt.
quelle
In diesem Blog-Beitrag werden fünf Tools aufgeführt, mit denen beschädigte Bilddateien erkannt und repariert werden können. Die einzige kostenlose davon ist File Repair 2.1.
quelle