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?