Cześć, jestem pewien, że zadawano wiele podobnych pytań, ale po wielu poszukiwaniach nie znalazłem żadnego postu opisującego moją sytuację.
Mam kilka plików jpg, które po pewnym momencie mają nieprawidłowe kolory, a także każdy piksel jest przesuwany w lewo. Myślę, że dzieje się tak z powodu niektórych brakujących bajtów w punkcie, w którym się zmienia. Próbowałem edytować plik za pomocą vi, ale wydaje się niemożliwe ustalenie, gdzie są brakujące bajty, a także vi jest bardzo skomplikowany w użyciu. Próbowałem także nano, ale nie jest to bezpieczne binarnie.
To jest jeden z omawianych obrazów:
Więc chcę zadać ci dwa pytania:
- Jak mogę naprawić takie obrazy w systemie Linux?
- Jak mogę bezpiecznie otworzyć i edytować plik w binarnym edytorze tekstów pod Linuksem?
Edycja: używając hexedit odkryłem, że od pozycji 0x27F000 do 0x27F403 są tylko te 0xff, a od 0x27F404 do 0x27FFFF są tylko zera 0x00. To sprawia, że coś takiego:
0027EFF0 F8 83 C3 E2 09 35 AF 13 44 6E C5 FD C7 EF 23 E8 .....5..Dn....#.
0027F000 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
[...]
0027F400 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 ................
[...]
0027FFF0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00280000 8F 39 6E 47 4F 43 5F 36 7C 73 66 F1 0D AE AD AF .9nGOC_6|sf.....
Zmieniając te bajty losowymi liczbami udało mi się cofnąć przesunięcie obrazu, ale nadal występuje problem z kolorem.
Czy ktoś mógłby wskazać mi trochę dokumentacji na temat kodowania JPEG, żebym mógł dowiedzieć się, gdzie kończy się blok 8x8.
Zastanawiam się, dlaczego pozycje są tak precyzyjne (0x27F000 do 0x27FFFF), czy może to być błąd mojej kamery lub karty pamięci, której użyłem?
Odpowiedzi:
Artykuł w Wikipedii na http://en.wikipedia.org/wiki/JPEG#Entropy_coding zawiera wiele informacji - najbardziej odpowiedni dla twojego obecnego problemu jest ten:
Przesunięcie kolorów w pozostałej części obrazu jest spowodowane pojedynczym złym współczynnikiem DC, który spada kaskadowo do całej reszty. Być może będziesz w stanie znaleźć mały obszar (może jeden bajt, może dwa - to prawdopodobnie pewna sekwencja bitów), który niezawodnie wpływa na kolory i wypróbować dużą liczbę różnych wartości.
Łatwiej może być po prostu naprawić obraz w edytorze graficznym - wygląda na to, że ten, który opublikowałeś, inny niż przesunięcie (i zawijanie), może po prostu mieć niższą jasność, możesz wybrać obszar i użyć narzędzia Poziomy. W przypadku innych, które wiążą się z większymi przesunięciami kolorów, możesz uzyskać dobry wynik, patrząc na rozkład kanałów kolorów (pliki JPG mogą być w RGB lub Y'CbCr) i ustalając każdy kanał osobno, ewentualnie zamieniając kanały.
EDYCJA: Ups, nie widziałem, ile lat ma twoje pytanie. Cóż, może będzie to przydatne tobie lub komuś innemu.
źródło
Wiele świetnych edytorów binarnych można znaleźć tutaj: /programming/839227/how-to-edit-binary-file-on-the-unix-systems
Moimi osobistymi ulubionymi są vim z:%! Xxd hack i hexedit
źródło
shed
?Próbowałeś
photorec
? Możesz zainstalować go na Ubuntu w następujący sposób:Sprawdź instrukcję za pomocą:
i po prostu uruchom
photorec
z terminala tak:Zostaniesz poproszony o wybranie źródła i celu oraz próby automatycznego odzyskania plików jpg.
Aby zapobiec uszkodzeniu oryginału, zalecam wykonanie kopii za pomocą
dd
polecenia. Powodzenia!źródło
Właśnie użyłem Photorec do odzyskania zdjęć z uszkodzonej karty SD. Chociaż nie odzyskał wszystkich plików, wykonał świetną robotę, odzyskując dużą liczbę z nich. To powiedziawszy, filmy MP4 zostały odzyskane, ale nie można ich otworzyć. Niektóre pliki JPEG zostały odzyskane, ale nie można ich było wyświetlić lub zostały naprawdę pomieszane, tak jak w przykładzie podanym na początku tego wątku. Photorec ich nie naprawił.
Konkluzja: Photorec jest zaprojektowany do odzyskiwania utraconych plików z uszkodzonych SYSTEMÓW PLIKÓW, ale najwyraźniej nie robi nic, aby odzyskać zawartość uszkodzonych PLIKÓW.
źródło