Czy ktoś zna sposób sprawdzania plików graficznych (zwłaszcza JPEG, GIF i PNG) pod kątem uszkodzeń (najlepiej w sposób zautomatyzowany)?
Wyjaśnienie:
Kilka dni temu polecenie działało niepoprawnie i spowodowało usunięcie tysięcy plików graficznych z woluminu FAT32, który praktycznie nie miał miejsca. Użyłem kilku różnych programów do odzyskiwania plików / zdjęć, ale naturalnie są one ograniczone w tym, ile mogą odzyskać (choć na szczęście wolumin ma klastry 8 KB, co nieco pomaga).
W każdym razie niektóre większe pliki, które zostały pofragmentowane, są teraz uszkodzone. Niektóre z nich wcale nie są prawdziwymi plikami (oprogramowanie do odzyskiwania zrzuciło tylko klastry, na które wskazywały teraz zastąpione wpisy w katalogu), podczas gdy inne są uszkodzone z powodu fragmentacji.
Ponadto, ponieważ niektóre formaty obrazów zawierają mniejszą wersję obrazu jako miniaturę, skanowanie miniaturek w poszukiwaniu uszkodzeń nie jest niezawodne, ponieważ może być nienaruszone, podczas gdy rzeczywisty plik (tj. Obraz, gdy jest wyświetlany w pełnym rozmiarze), może być uszkodzony.
Oto kilka przykładów:
Oto drugi. Jest tak uszkodzony, że niczego nie wyświetla.
(Trzeci nawet nie załaduje, bo nie ma nawet poprawnego nagłówka!)
źródło
Odpowiedzi:
Ponieważ natknąłem się na to, próbując odpowiedzieć na to samo pytanie, dodam kolejne świetne rozwiązanie:
Zła Peggy
Użycie
Z menu wybierz,
File > Scan
a następnie użyj okna dialogowego pliku, aby przejść do folderu, w którym znajdują się obrazy. Następnie program rozpocznie skanowanie folderu i wszystkich podfolderów w poszukiwaniu obrazów (.jpg, .png, .bmp, .gif). Jeśli chcesz zeskanować wiele zdjęć, zajmie to trochę czasu, ponieważ program wymaga pełnego załadowania i przeanalizowania pliku obrazu, więc możesz pozwolić mu działać przez noc.Podczas skanowania pokaże procent postępu na pasku stanu. Wszelkie znalezione obrazy, które nie są idealne, pojawią się bezpośrednio na liście. Kliknięcie dowolnego obrazu na liście spowoduje wyświetlenie podglądu tego obrazu. Dość często obraz będzie miał niewielki problem z formatem pliku, a obraz nadal będzie wyglądał dobrze. Innym razem obraz w ogóle nie będzie renderowany, a podgląd będzie po prostu czarny. Czasami obraz zostanie uszkodzony i zobaczysz coś takiego jak na zrzucie ekranu powyżej.
Bardzo przydatną sztuczką jest kliknięcie nagłówka kolumny na,
Reason
a obrazy zostaną posortowane według stopnia ich uszkodzenia (np. Wszystkie złe formaty plików, które nadal renderują się poprawnie, zostaną przeniesione na dół, umożliwiając skupienie się na poważniejszych przypadkach) .Również jeśli pierwsze skanowanie zakończy się i rozpocznie się kolejne skanowanie, wyniki zostaną po prostu dodane do listy. Więc jeśli masz wiele różnych folderów z obrazami, możesz po prostu zeskanować je sekwencyjnie bez usuwania listy po rozpoczęciu nowego skanowania. Jeśli chcesz wyczyścić listę, użyj menu kontekstowego i kliknij
Clear list
.Linki
Pliki do pobrania dla systemów Windows, Linux i OS X można znaleźć tutaj:
https://www.coderslagoon.com
Kod źródłowy jest tutaj:
https://github.com/llaith/BadPeggy
źródło
Wypróbuj opcję jpeginfo '
-c
' dla swoich plików JPEG.Widziałem korupcję, którą pokazujesz, także w przypadku złych kart pamięci.
To, co chcesz, powinno być możliwe i dostępne, sprawdź Uszkodzenie plików graficznych ;
część z internetowej encyklopedii formatów plików graficznych .
Zobacz także Sprawdzanie integralności plików w Podstawowym wprowadzeniu do funkcji PNG .
Być może zainteresuje Cię to pytanie Stackoverflow:
Jak programowo sprawdzić, czy obraz (PNG, JPEG lub GIF) jest uszkodzony ?
Aktualizacja : Źródło tarball dla wersji 1.6.1 autorstwa Timo Kokkonen .
Powinieneś być w stanie zbudować plik binarny dla swojego komputera.
źródło
jpeginfo -c *.JPG | ag (WARNING|ERROR)
pracował dla mnieProgram identyfikacji ImageMagick poinformuje cię, jeśli obraz jest uszkodzony. Testowanie pętli „for i in find” dla kodu zwrotnego „zero” z identyfikatora pozwoli ci dość łatwo napisać test, aby zrzucić listę uszkodzonych lub uszkodzonych plików. Działa również w systemie Windows z programem PowerShell.
Poniższy kod ze zmianami dla ścieżki działa dobrze w PowerShell
źródło
identify
można wyświetlać uszkodzone dane JPEG za pomocą-verbose
, zwykle się nie wyświetla.Można to zrobić za pomocą Imaging Library jest Python
.verify()
polecenia . [1]Aby uruchomić to w systemie Windows, zainstaluj Python (zainstalowałem najnowszą wersję Python 2), a następnie zainstaluj Pillow (rozwidlenie biblioteki Python Imaging Library (PIL)). Następnie skopiuj kod jpeg_corrupt.py [2] i zapisz jego zawartość w pliku .PY, np. Jpeg_corrupt.py.
Zauważ, że zmieniłem następujący wiersz kodu w pliku jpeg_corrupt.py :
self.globs = ['*.jpg', '*.jpe', '*.jpeg']
na
self.globs = ['*.jpg', '*.jpe', '*.jpeg', '*.png', '*.gif']
To, aby pliki .PNG i .GIF również zostały przeskanowane.
Można go następnie wykonać za pomocą wiersza polecenia systemu Windows (cmd.exe) w następujący sposób:
C:\Python27\python.exe "C:\Directory containing the .PY file\jpeg_corrupt.py" "C:\Directory of folder to be scanned"
Pierwsza część polecenia, „ C: \ Python27 \ python.exe ”, może się różnić w zależności od zainstalowanej wersji Pythona i katalogu, w którym został zainstalowany. W moim przykładzie jest to domyślny katalog instalacyjny Python 2.7.
Powinien skanować wszystkie obrazy JPG, GIF i PNG w określonym katalogu i wszystkich swoich podkatalogach. Pokaże wyjście, jeśli wykryje uszkodzony plik obrazu.
Wpadłem na ten przykładowy obrazek OP i dała ten komunikat o błędzie:
...\YcB9n.png: string index out of range
.Kod można również wprowadzić w pliku skryptu .BAT, dzięki czemu można go łatwo uruchomić w określonym katalogu bez konieczności używania wiersza polecenia:
Źródła:
[1]: Odpowiedź w przepełnieniu stosu - „Jak programowo sprawdzić, czy obraz (PNG, JPEG lub GIF) jest uszkodzony?” autor: ChristopheD
[2]: Komentarz Denilsona Sá w odpowiedzi SO na link w [1]
źródło
Zmodyfikowałem kod z odpowiedzi galacticninja, aby zrobić dokładnie to, czego chciał OP. Jest uruchamiany w ten sam sposób, jednak przenosi pliki do folderu catch w
C:\
katalogu głównym, zamiast wyświetlać obrazy w wierszu polecenia.Mój zmodyfikowany kod możesz znaleźć na Pastebin lub poniżej:
źródło
Zainstaluj imagemagick, jeśli jesteś na Macu, możesz użyć Homebrew.
Następnie możesz użyć tego małego skryptu w języku Python.
Zastąp
/Your/Path/To/Files/
i odkomentuj ostatni wiersz, jeśli chcesz usunąć uszkodzone obrazy.źródło
Użyj
identify
z pakietu ImageMagick.Przykładowy przykład:
A następujące polecenie zidentyfikuje wszystkie uszkodzone pliki JPEG w bieżącym folderze:
źródło
Jeśli masz zainstalowany Perl, możesz użyć tego skryptu. Musisz zapisać listę plików do sprawdzenia w f.txt przed uruchomieniem skryptu. Możesz zrobić tę listę za pomocą Irfanview. (załaduj wszystkie kciuki z podfolderów i zapisz w txt). Lista dobrych plików jest zapisywana w pliku okf.txt, a uszkodzone pliki - w pliku brokenf.txt.
=====================
źródło
Mój otwarty skrypt Pyhton sprawdzający integralność mediów sprawdza integralność zdjęć oraz plików wideo / audio. Wykorzystuje moduły Pillow, opakowania ImageMagick i FFmpeg, aby spróbować dekodować pliki.
Poduszka image.verify nie widzi wszystkich wad (np. Ignoruje obcięcie) z tego powodu wykonałem także image / decode + manipulację.
źródło
W tym blogu wymieniono pięć narzędzi, które mogą (wykrywać i) naprawiać uszkodzone pliki obrazów. Jedyną bezpłatną z nich jest File Repair 2.1.
źródło