1

sorl-thumbnailを使用してアップロードされた画像のサイズを変更するWebサイトを作成しました。ほとんどの画像は問題なくサイズ変更されていますが、次のエラーが発生する場合があります。

Caught IOError while rendering: not enough data
Request Method: GET
Request URL:    http://localhost:8000/user/nash22/photographs/
Django Version: 1.3.1
Exception Type: TemplateSyntaxError
Exception Value:    
Caught IOError while rendering: not enough data
Exception Location: /usr/local/lib/python2.7/site-packages/PIL/TiffImagePlugin.py in load, line 382
Python Executable:  /usr/local/bin/python
Python Version: 2.7.1

グーグルで検索しましたが、関連する答えが見つかりませんでした。誰かが私に何が起こったのか、そしてどのようにそれを修正するのを手伝ってもらえますか?ありがとうございました。

編集

完全なトレースバック

トレースバック(最後の最後の呼び出し):

ファイル"/l​​ib/python2.7/django/core/handlers/base.py"、111行目、get_response response = callback(request、* callback_args、** callback_kwargs)

ファイル"/home/swaroop/project/apps/photography/views.py"、行702、showPhoto context_instance = RequestContext(request))

ファイル"/l​​ib/python2.7/django/shortcuts/ init .py"、20行目、render_to_response return HttpResponse(loader.render_to_string(* args、** kwargs)、** httpresponse_kwargs)

ファイル"/l​​ib/python2.7/django/template/loader.py"、行188、render_to_string return t.render(context_instance)

ファイル"/l​​ib/python2.7/django/template/base.py"、行123、render return self._render(context)

_renderのファイル"/l​​ib/python2.7/django/template/base.py"、行117 return self.nodelist.render(context)

ファイル"/l​​ib/python2.7/django/template/base.py"、744行目、レンダリングビット.append(self.render_node(node、context))

ファイル"/l​​ib/python2.7/django/template/base.py"、行757、render_node return node.render(context)

ファイル"/l​​ib/python2.7/django/template/loader_tags.py"、127行目、render returncompiled_pa​​rent._render(context)

_renderのファイル"/l​​ib/python2.7/django/template/base.py"、行117 return self.nodelist.render(context)

ファイル"/l​​ib/python2.7/django/template/base.py"、744行目、レンダリングビット.append(self.render_node(node、context))

ファイル"/l​​ib/python2.7/django/template/base.py"、行757、render_node return node.render(context)

ファイル"/l​​ib/python2.7/django/template/loader_tags.py"、64行目、レンダリング結果= block.nodelist.render(context)

ファイル"/l​​ib/python2.7/django/template/base.py"、744行目、レンダリングビット.append(self.render_node(node、context))

ファイル"/l​​ib/python2.7/django/template/base.py"、行757、render_node return node.render(context)

ファイル"/l​​ib/python2.7/sorl/thumbnail/templatetags/thumbnail.py"、45行目、render return self._render(context)

ファイル"/l​​ib/python2.7/sorl/thumbnail/templatetags/thumbnail.py"、97行目、レンダリングファイル、ジオメトリ、**オプション

ファイル"/l​​ib/python2.7/sorl/thumbnail/base.py"、61行目、get_thumbnailサムネイル)

ファイル"/l​​ib/python2.7/sorl/thumbnail/base.py"、86行目、_create_thumbnail image = default.engine.create(source_image、geometry、options)

ファイル"/l​​ib/python2.7/sorl/thumbnail/engines/base.py"、15行目、create image = self.orientation(image、geometry、options)

ファイル"/l​​ib/python2.7/sorl/thumbnail/engines/base.py"、26行目、オリエンテーションreturn self._orientation(image)

ファイル"/l​​ib/python2.7/sorl/thumbnail/engines/pil_engine.py"、29行目、_orientation exif = image._getexif()

_getexif info.load(file)のファイル "/usr/local/lib/python2.7/site-packages/PIL/JpegImagePlugin.py"、行381

ファイル"/usr/local/lib/python2.7/site-packages/PIL/TiffImagePlugin.py"、行382、ロードレイズIOError、"not十分なデータ"

IOError:データが不足しています

4

1 に答える 1

7

アップデート

image._getexif非常に実験的であると主張されています。sorl -thumbnailissue #98を参照すると、コードを次のように更新できます。

def _orientation(self, image):
    try:
        exif = image._getexif()
    except (AttributeError, IOError):
        exif = None

これは、破損した、またはサポートされていない可能性のある TIFF ファイルを PIL が読み込もうとしたことが原因です。
通常、 を使用するforms.ImageFieldと、Django はアップロードされた画像の正確性をチェックします。
したがって、次のことを行う必要があります。

  • ビューでのアップロードに対処するforms.ImageFieldために、 のデフォルトである を使用していることを確認してくださいmodels.ImageField
  • アップロードされた画像を確認する

    from PIL import Image
    Image.open(path).load()
    
  • TIFF を処理するツールキットを使用して画像を開き、開くことができる場合は Jpeg または Png に保存し、モデル インスタンスのフィールドを更新して新しいファイルを指すようにします。

また、ユーザーが TIFF の代わりに jpeg/png/gif などの通常の形式をアップロードするように制限することもできます。

于 2012-05-14T12:41:50.150 に答える