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

时间:2012-05-14 12:23:14

标签: python django python-imaging-library sorl-thumbnail

我创建了一个使用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

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

修改

完成追溯

  

追踪(最近一次呼叫最后一次):

     

文件   " /lib/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))

     

文件   " /lib/python2.7/django/shortcuts/的初始化的.py&#34 ;,   第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))

     

文件   " /lib/python2.7/django/template/base.py" ;,   第757行,在render_node中返回node.render(context)

     

文件   " /lib/python2.7/django/template/loader_tags.py" ;,   第127行,在渲染中返回compiled_pa​​rent._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行,渲染文件,几何,**选项

     

File" /lib/python2.7/sorl/thumbnail/base.py" ;,第61行,   在get_thumbnail thumbnail)

     

File" /lib/python2.7/sorl/thumbnail/base.py" ;,第86行,   in _create_thumbnail image = default.engine.create(source_image,   几何,选项)

     

文件" /lib/python2.7/sorl/thumbnail/engines/base.py",   第15行,在create image = self.orientation(图像,几何,   选项)

     

文件" /lib/python2.7/sorl/thumbnail/engines/base.py",   第26行,在方向上返回self._orientation(图像)

     

文件   " /lib/python2.7/sorl/thumbnail/engines/pil_engine.py" ;,   第29行,在_orientation exif = image._getexif()

     

File" /usr/local/lib/python2.7/site-packages/PIL/JpegImagePlugin.py",   第381行,在_getexif info.load(file)

中      

File" /usr/local/lib/python2.7/site-packages/PIL/TiffImagePlugin.py",   第382行,在加载IOError中,"没有足够的数据"

     

IOError:数据不够

1 个答案:

答案 0 :(得分:6)

更新

据称,{p> image._getexif具有很高的实验性。参考sorl-thumbnailissue #98,您可以将代码更新为

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

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

  • 确保您使用forms.ImageField models.ImageField的默认设置,以便在您的视图中处理上传
  • 通过

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

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