我认为这个问题与 Zope 无关,尽管如此,我还是要解释一下我正在做的事情:
我正在使用 Zope 的一个 PUT _ Factory 来上传每个 fTP 的图像到 zODB。上传的图像保存为新创建的容器对象中的 Zope Image。这个工作很好,但是如果图像超过一定的大小(宽度和高度) ,我想调整图像的大小。因此我使用 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) Image 对象。
我听说当超过一定的尺寸时,PIL 处理图像数据的方式不同,但我不知道如何调整我的代码。或者与 PIL 的延迟加载有关?