2016-09-18 10 views
9

私はgtk.gdk.PixbufLoaderを数年間使用しています。glib.GError:JPEGイメージファイルの解釈エラー(サポートされていないマーカータイプ0x05)

今日、私は新しい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)を出力します。

これは、1つではなく、すべてのファイルで発生します。これは、ファイルが壊れていないという結論につながります。

何が間違っている可能性がありますか?ここで

は、ファイルの1つです。ここ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() 

あなたは1chunksizeを設定した場合、それは動作します。

130000をchunksizeとして使用すると、write()への最初の呼び出しは失敗します。

+1

これをトリガーするコードを含めると、人々がそれを再現できるようにするのがよいでしょう。 – nemequ

+0

@nemequはい、そうです。例外を再現するために小さなスニペットを追加しました。 – guettli

+0

なぜあなたは負荷をチャンクしていますか? pixbufloader.write()は完全なイメージを必要とします。私はpixbufloaderによって返されたブール値をチェックすることを前提としています - >前の繰り返しでは、イメージをデコードするのに十分なデータがないので、例外が "偽"になるでしょう。次に、あなたはどこにもいなくても(そしてデコーダはステートレスのように)、不明なマーカーで始まります。 – artemonster

答えて

5

私はあなたのコードを編集し、chunkksize = 69632の直後、つまり、 at chunkksize = 69633、このエラーが表示されます。 私が気づいたもう一つの事は、このエラーがファイル関連であるということです。この "20160627_163057-0.jpg"イメージ以外のファイルを使用すると、エラーは発生しません。

私の結論は、この特定のファイルには問題があるということです。 ご確認ください、 ありがとうございます。

+0

ファイルは、グノームや他のイメージプロセッサ(jpgtopnm、convert(image magickから))で表示できます。 AND:chunkksize = 1でバイト単位でファイルをロードすると読み込みに失敗しません。 – guettli

+0

私はイメージが大丈夫だと思います。 – guettli

+0

OK、チャンクサイズが69633を超えるとこのエラーが発生するようです。これを調査していただきありがとうございます。回避策は、小さなチャンクサイズを使用することです....しかし、解決策ではなく、まだ解決策です。 – guettli

関連する問題