glib.GError: 解释JPEG图像文件出错(不支持的标记类型0x05)

9

我使用 gtk.gdk.PixbufLoader 已经几年了。

今天,我尝试从一台新的安卓设备加载 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 这是重现异常的代码片段:
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作为chunksize,那么第一次调用write()失败。

1
最好包含触发此问题的代码,以便其他人可以重现它。 - nemequ
@nemequ 是的,你说得对。我添加了一个小片段来重现异常。 - guettli
为什么你要分块加载?pixbufloader.write()需要完整的图像。我猜你在上一次迭代中检查了pixbufloader返回的布尔值->如果没有足够的数据来解码图像,你会得到“false”。然后,你从无处开始(而解码器似乎是无状态的),有一个未知的标记。 - artemonster
@artemonster,我分块是因为我不想我的应用在加载时冻结。我在后台(预加载)加载下一张图片。这段代码大约已经运行了6年,没有修改过。在升级到Ubuntu 16.04之后就出了问题。 - guettli
1个回答

5

我研究了你的代码,并得出结论,即在chunksize = 69632之后,也就是在chunksize = 69633时,会出现这个错误。 我还注意到这个错误与文件有关。如果我使用除了"20160627_163057-0.jpg"以外的任何其他文件,就不会出现错误。

因此,我的结论是这个特定的文件存在一些问题。 请检查一下, 谢谢。


文件可以在 GNOME 图像查看器和其他图像处理器(如 jpgtopnm、convert(来自 ImageMagick))中显示。同时,如果我使用 chunksize=1 逐字节加载文件,则不会出现加载失败的情况。 - guettli
我认为这张图片没问题。 - guettli
是的,看起来是这样。 - Prakhar Trivedi
1
@guettli,我尝试了一些关于你的代码的其他操作,现在我非常确定这是一个文件相关的问题。请查看以下链接:“http://serverfault.com/questions/248596/unsupported-marker-type-in-httpd-error-log”和“http://askubuntu.com/questions/24350/i-cant-open-jpg-files-what-to-do”。 - Prakhar Trivedi
1
图片在查看时似乎没问题,但它的编码可能存在一些问题。 - Prakhar Trivedi
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接