1

画像を開き、画像を確認してから再度開く必要があります (以下の PIL ドキュメントからの引用の最後の文を参照)

im.verify()

画像データを実際にデコードせずに、ファイルが壊れているかどうかを判断しようとします。このメソッドで問題が見つかった場合は、適切な例外が発生します。このメソッドは、新しく開いた画像に対してのみ機能します。イメージが既にロードされている場合、結果は未定義です。また、この方法を使用した後にイメージをロードする必要がある場合は、イメージ ファイルを再度開く必要があります。

これは私のコードにあるものpictureで、django InMemoryUploadedFile オブジェクトは次のとおりです。

img = Image.open(picture)
img.verify()
img = Image.open(picture)

最初の 2 行は正常に動作しますが、3 行目で次のエラーが発生します (画像を「再度開く」ことを試みています)。

IOError: cannot identify image file

ドキュメントが示唆するように、画像ファイルを再度開く適切な方法は何ですか?

4

2 に答える 2

5

これはやるのと変わらない

f = open('x.png')
Image.open(f)
Image.open(f)

上記のコードは機能しません。なぜなら、PIL は最初の数バイトを読み取ってその形式を識別しようとしている間にファイル内を進むためです。この状況で秒を使用しようとするとImage.open、ファイル内の現在の位置が画像のヘッダーを過ぎているため、前述のように失敗します。これを確認するために、何f.tell()が返されるかを確認できます。f.seek(0)この問題を解決するには、 への 2 回の呼び出しの間に実行するか、ファイルImage.openを閉じてから再度開くことにより、ファイルの先頭に戻る必要があります。

于 2013-01-15T04:18:10.580 に答える
1

と 秒のdel img間を実行してみてください。verifyopen

于 2013-01-15T04:08:20.377 に答える