Je pense que ce problème n'est pas lié à Zope. Néanmoins, je vais expliquer ce que j'essaie de faire :
J'utilise un PUT_factory dans Zope pour télécharger des images vers la BDOCÉ par FTP. L'image téléchargée est enregistrée comme une image Zope à l'intérieur d'un objet conteneur nouvellement créé. Cela fonctionne bien, mais je veux redimensionner l'image si elle dépasse une certaine taille (largeur et hauteur). J'utilise donc la fonction thumbnail de PIL pour les redimensionner, par exemple à 200x200. Cela fonctionne bien tant que les images téléchargées sont relativement petites. Je n'ai pas vérifié la limite exacte, mais 976x1296px est toujours acceptable.
Avec des images plus grandes, j'obtiens :
Module PIL.Image, line 1559, in thumbnail
Module PIL.ImageFile, line 201, in load
IOError: image file is truncated (nn bytes not processed).
J'ai testé beaucoup de jpegs provenant de mon appareil photo. Je ne pense pas qu'ils soient tous tronqués.
Voici mon code :
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)
Comme j'utilise une usine PUT_factory, je n'ai pas d'objet fichier, j'utilise soit les données brutes de l'usine, soit un objet image (Zope) précédemment créé.
J'ai entendu dire que l'IAP traite les données d'image différemment lorsqu'une certaine taille est dépassée, mais je ne sais pas comment adapter mon code. Ou est-ce lié au chargement paresseux de l'IAP ?