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ę.
Prawdopodobnie warto włączyć kod, który uruchamia to, aby ludzie mogli go odtworzyć ... – nemequ
@nemequ tak, dobrze. Dodałem mały fragment kodu, aby odtworzyć wyjątek. – guettli
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