我认为这个问题与 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,因此我没有文件对象,我使用的是来自工厂的原始数据或以前创建的 (Zope) Image 对象。
我听说当超过一定大小时 PIL 会以不同的方式处理图像数据,但我不知道如何调整我的代码。还是和PIL的延迟加载有关?