Я думаю, что эта проблема не связана с Zope. Тем не менее я объясню, что я пытаюсь сделать:
Я использую PUT_factory в Zope для загрузки изображений на ZODB на FTP. Загруженное изображение сохраняется как изображение 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).
Я проверил много jpegs с моей камеры. Я не думаю, что все они урезаны.
Вот мой код:
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, у меня нет файлового объекта, я использую либо необработанные данные из factory, либо ранее созданного объекта Zope.
Я слышал, что PIL обрабатывает данные изображения по-разному, когда определенный размер превышен, но я не знаю, как настроить свой код. Или это связано с ленивой загрузкой PIL?