2016-09-18 42 views
9

Używam od gtk.gdk.PixbufLoader od kilku lat.glib.GError: Błąd interpretacji pliku obrazu JPEG (Unsupported marker type 0x05)

Dzisiaj próbuję załadować plik jpg z nowego urządzenia z systemem Android i uzyskać ten wyjątek:

Traceback (most recent call last): 
    File "myscript.py", line 118, in next 
    loader.write(buf) 
glib.GError: Error interpreting JPEG image file (Unsupported marker type 0x05) 

Ten sam plik może być ładowany w EOG (Eye of GNOME) i mogę używać convert (od image-magick) bez błędu.

Zdarza się dla wszystkich plików, nie tylko jednego, prowadzi to do wniosku, że pliki nie są zepsute.

Co może być nie tak?

Oto jeden z plików: http://thomas-guettler.de/20160627_163057-0.jpg

Oto urywek odtworzyć wyjątek:

from gtk.gdk import PixbufLoader 
pixbufloader=PixbufLoader() 
chunksize=130000 
fd=open('20160627_163057-0.jpg', 'rb') 
while True: 
    bytes=fd.read(chunksize) 
    if not bytes: 
     break 
    print pixbufloader.write(bytes) 
pixbufloader.close() 

Jeśli ustawisz chunksize do 1, to działa.

Jeśli użyję 130000 jako pseudo, to pierwsze połączenie z write() nie powiedzie się.

+1

Prawdopodobnie warto włączyć kod, który uruchamia to, aby ludzie mogli go odtworzyć ... – nemequ

+0

@nemequ tak, dobrze. Dodałem mały fragment kodu, aby odtworzyć wyjątek. – guettli

+0

Dlaczego zgniatasz ładunek? pixbufloader.write() oczekuje pełnego obrazu. Przypuszczam, że sprawdzasz zwróconą wartość boolean przez pixbufloader -> w poprzedniej iteracji przed wyjątkiem otrzymasz "false", ponieważ nie ma wystarczającej ilości danych do odkodowania obrazu. Następnie zaczynasz od środka pustki (a dekoder jest, jak się wydaje, bezpaństwowy), z nieznanym znacznikiem. – artemonster

Odpowiedz

5

Pracowałem nad twoim kodem i doszedłem do wniosku, że dokładnie po chunksize = 69632, tj. at chunksize = 69633, Ten błąd jest wyświetlany. Jeszcze jedną rzeczą, którą zauważyłem, jest to, że ten błąd jest związany z plikiem. Jeśli używam dowolnego pliku innego niż ten "20160627_163057-0.jpg", błąd nie występuje.

Podsumowując, ten konkretny plik ma pewien problem. Proszę sprawdzić, Dzięki.

+0

Plik może być wyświetlany w eye-of-gnome i innych procesorach obrazu (jpgtopnm, convert (z magick obrazu)). AND: ładowanie nie zawiedzie, jeśli załaduję plik bajt po bajcie przy pomocy chunksize = 1. – guettli

+0

Myślę, że obraz jest w porządku. – guettli

+0

OK, wielkości porcji większe niż 69633 wydają się powodować ten błąd. Dziękuję za rozpatrzenie tego. Obejściem byłoby użycie mniejszych rozmiarów kawałków ... ale wciąż praca - nie rozwiązanie. – guettli