この問題は Zope 関連ではないと思います。それにもかかわらず、私がやろうとしていることを説明します:
Zope で PUT_factory を使用して、FTP ごとに ZODB に画像をアップロードしています。アップロードされたイメージは、新しく作成されたコンテナ オブジェクト内に Zope イメージとして保存されます。これで問題なく動作しますが、画像が特定のサイズ (幅と高さ) を超える場合はサイズを変更したいと考えています。そのため、PIL のサムネイル機能を使用して、サイズを 200x200 に変更しています。アップロードされた画像が比較的小さい限り、これは問題なく機能します。正確な制限は確認していませんが、976x1296px で問題ありません。
より大きな写真で私は得る:
Module PIL.Image, line 1559, in thumbnail
Module PIL.ImageFile, line 201, in load
IOError: image file is truncated (nn bytes not processed).
カメラから多くの jpeg をテストしました。それらがすべて切り捨てられているとは思いません。
これが私のコードです:
if img and img.meta_type == 'Image':
pilImg = PIL.Image.open( StringIO(str(img.data)) )
elif imgData:
pilImg = PIL.Image.open( StringIO(imgData) )
pilImg.thumbnail((width, height), PIL.Image.ANTIALIAS)
PUT_factory を使用しているため、ファイル オブジェクトはありません。ファクトリからの生データまたは以前に作成された (Zope) Image オブジェクトのいずれかを使用しています。
特定のサイズを超えると PIL が画像データを別の方法で処理すると聞いたことがありますが、コードを調整する方法がわかりません。それとも、PIL の遅延読み込みに関連していますか?