【发布时间】:2016-09-18 19:54:31
【问题描述】:
我使用gtk.gdk.PixbufLoader 已经好几年了。
今天,我尝试从新的 android 设备加载 jpg 文件并得到这个异常:
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)
可以在 eog(gnome 之眼)中加载相同的文件,我可以使用 convert(来自 image-magick)而不会出错。
所有文件都会发生这种情况,而不仅仅是一个,这使我得出结论,文件没有损坏。
可能出了什么问题?
这是其中一个文件:http://thomas-guettler.de/20160627_163057-0.jpg
这里是重现异常的sn-p:
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()
如果您将chunksize 设置为1,那么它可以工作。
如果我使用130000 作为块大小,那么对write() 的第一次调用会失败。
【问题讨论】:
-
包含触发它的代码可能是个好主意,这样人们就可以重现它......
-
@nemequ 是的,你说得对。我添加了一个小 sn-p 来重现异常。
-
你为什么要分块负载? pixbufloader.write() 需要一个完整的图像。我想您在出现异常之前检查 pixbufloader -> 在上一次迭代中返回的布尔值,因为没有足够的数据来解码图像。然后,您从一个未知标记开始(并且解码器似乎是无状态的)。
-
@artemonster 我不希望我的应用程序在加载过程中冻结。我在后台加载(预加载)下一个图像。这段代码在没有修改的情况下工作了大约 6 年。升级到 Ubuntu 16.04 后它坏了。