【问题标题】:glib.GError: Error interpreting JPEG image file (Unsupported marker type 0x05)glib.GError:解释 JPEG 图像文件时出错(不支持的标记类型 0x05)
【发布时间】:2016-09-18 19:54:31
【问题描述】:

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

今天,我尝试从新的 android 设备加载 j​​pg 文件并得到这个异常:

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 后它坏了。

标签: python jpeg pygtk glib


【解决方案1】:

我研究了您的代码并得出结论,恰好在 chunksize = 69632 之后,即在 chunksize = 69633 处,显示此错误。 我注意到的另一件事是此错误与文件相关。如果我使用此“20160627_163057-0.jpg”图像以外的任何文件,则不会发生错误。

所以我的结论是这个特定的文件有一些问题。 请检查, 谢谢。

【讨论】:

  • 该文件可以在 eye-of-gnome 和其他图像处理器(jpgtopnm、convert (from image magick))中显示。并且:如果我使用 chunksize=1 逐字节加载文件,加载不会失败。
  • 我觉得图片还可以。
  • 好的,大于 69633 的块大小似乎会产生此错误。感谢您对此进行调查。解决方法是使用较小的块大小....但仍然是解决方法 - 不是解决方案。
  • @guettli,我用你的代码尝试了更多的东西,现在我很确定这是一个与文件相关的问题。请检查这些链接“serverfault.com/questions/248596/…”和“askubuntu.com/questions/24350/i-cant-open-jpg-files-what-to-do
  • 图片看起来还可以,但它的编码可能有一些问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多