首页 文章

Python图像库错误 - 渲染时捕获IOError:数据不足

提问于
浏览
0

我创建了一个使用sorl-thumbnail来调整上传图像大小的网站 . 大多数图像都没有任何问题调整大小,但很少有人收到以下错误:

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

我在谷歌搜索但找不到任何相关的答案 . 有人可以帮我解决发生的事情以及如何解决这个问题?谢谢 .

编辑

完成回溯

Traceback(最近一次调用最后一次):文件“/lib/python2.7/django/core/handlers/base.py”,第111行,在get_response response = callback(request,* callback_args,** callback_kwargs)File“/ home / swaroop / project / apps / photography / views.py“,第702行,showPhoto context_instance = RequestContext(request))文件”/lib/python2.7/django/shortcuts/init.py“,第20行,在render_to_response中返回HttpResponse(loader.render_to_string(* args,** kwargs),** httpresponse_kwargs)文件“/lib/python2.7/django/template/loader.py”,第188行,在render_to_string中返回t.render(context_instance)文件“/lib/python2.7/django/template/base.py”,第123行,在渲染中返回self._render(context)文件“/lib/python2.7/django/template/base.py”,第117行,在_render中返回self.nodelist.render(context)文件“/lib/python2.7/django/template/base.py”,第744行,在render bits.append(self.render_node(node,context))File“/ lib / python2.7 / django / template / base.py“,第757行,在render_node中返回node.render(context)文件”/ lib /python2.7/django/template/loader_tags.py“,第127行,在渲染中返回compiled_parent._render(context)文件”/lib/python2.7/django/template/base.py“,第117行,在_render返回self.nodelist.render(context)文件“/lib/python2.7/django/template/base.py”,第744行,在render bits.append(self.render_node(node,context))文件“/ lib / python2 .7 / django / template / base.py“,第757行,在render_node中返回node.render(context)文件”/lib/python2.7/django/template/loader_tags.py“,第64行,在render result = block .nodelist.render(context)文件“/lib/python2.7/django/template/base.py”,第744行,在render bits.append(self.render_node(node,context))文件“/ lib / python2 . 7 / django / template / base.py“,第757行,在render_node中返回node.render(context)文件”/lib/python2.7/sorl/thumbnail/templatetags/thumbnail.py“,第45行,在渲染中返回self ._render(context)文件“/lib/python2.7/sorl/thumbnail/templatetags/thumbnail.py”,第97行,在渲染文件中,几何体,**选项文件“/lib/python2.7/sorl/thumbna il / base.py“,第61行,在get_thumbnail缩略图中)文件”/lib/python2.7/sorl/thumbnail/base.py“,第86行,在_create_thumbnail image = default.engine.create(source_image,geometry,options) )文件“/lib/python2.7/sorl/thumbnail/engines/base.py”,第15行,在create image = self.orientation(image,geometry,options)文件“/lib/python2.7/sorl/thumbnail /engines/base.py“,第26行,在方向返回self._orientation(image)文件”/lib/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行site-packages / PIL / TiffImagePlugin.py“,第382行,在load load IOError中,”数据不够“IOError:数据不够

1 回答

  • 6

    更新

    image._getexif 据称是高度实验性的 . 参考sorl-thumbnailissue #98,你可以更新代码

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

    它's caused by PIL'尝试加载已损坏或可能不受支持的TIFF文件 .
    通常当你使用 forms.ImageField 时,Django会检查上传图像的正确性 .
    因此,您需要:

    • 确保您使用 forms.ImageFieldmodels.ImageField 的默认设置)在您的视图中处理上传

    • 检查上传的图像

    from PIL import Image
    Image.open(path).load()
    
    • 使用工具包处理TIFF以打开图像,如果可以打开它,将其保存到Jpeg或Png并更新模型实例的字段以指向新文件 .

    此外,您可以限制用户上传普通格式,如jpeg / png / gif而不是TIFF

相关问题