python教程—Python PIL ” IOError: image file truncated “与大图片-Python实用宝典

python教程—Python PIL ” IOError: image file truncated “与大图片

我认为这个问题与zope无关。尽管如此,我将解释我正在尝试做什么:我正在使用Zope中的PUT_factory将图像上传到每个FTP的ZODB。上传的图像将作为Zope图像保存在新创建的容器对象中。这工作得很好,但我想调整大小的图像,如果它超过一定的大小(宽度和高度)。所以我用PIL的缩略图功能把它们调整到200x200。只要上传的图片相对较小,这种方法就可以很好地工作。我没有查看具体的限制,但是976x1296px还是可以的。

我认为这个问题与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,所以没有file对象,我使用的要么是来自工厂的原始数据,要么是以前创建的(Zope)图像对象。

我听说PIL处理图像数据的方式是不一样的,超过了一定的尺寸,但是我不知道如何调整我的代码。还是跟PIL的延迟装货有关?

回答

我在这里回复有点晚了,但是我遇到了一个类似的问题,我想分享一下我的解决方案。首先,这是一个非常典型的堆栈跟踪这个问题:

    Traceback (most recent call last): ... File ..., line 2064, in ... im.thumbnail(DEFAULT_THUMBNAIL_SIZE, Image.ANTIALIAS) File "/Library/Python/2.7/site-packages/PIL/Image.py", line 1572, in thumbnail self.load() File "/Library/Python/2.7/site-packages/PIL/ImageFile.py", line 220, in load raise IOError("image file is truncated (%d bytes not processed)" % len(b)) IOError: image file is truncated (57 bytes not processed)

If we look around line 220 (in your case line 201—perhaps you are running a slightly different version), we see that PIL is reading in blocks of the file and that it expects that the blocks are going to be of a certain size. It turns out that you can ask PIL to be tolerant of files that are truncated (missing some file from the block) by changing a setting.

在你的代码块之前,简单地添加以下内容:

    from PIL import ImageFile ImageFile.LOAD_TRUNCATED_IMAGES = True

…你应该表现得很好。

编辑:看起来这对与pillow捆绑的PIL版本是有帮助的(“pip install pillow”),但是对于PIL的默认安装可能不起作用

​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python实用宝典 作者:Python实用宝典 发表,其版权均为 Python实用宝典 所有,文章内容系作者个人观点,不代表 Python实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
1

发表评论