Python PIL “IOError: arquivo de imagem truncado” com grandes imagens

Eu acho que esse problema não é relacionado ao Zope. No entanto, vou explicar o que estou tentando fazer:

Estou usando uma PUT_factory no Zope para fazer upload de imagens para o ZODB por FTP. A imagem enviada é salva como uma imagem do Zope dentro de um objeto contêiner recém-criado. Isso funciona bem, mas eu quero redimensionar a imagem se exceder um certo tamanho (largura e altura). Então, estou usando a função de miniatura do PIL para redimensioná-los, ou seja, para 200 x 200. Isso funciona bem, desde que as imagens enviadas sejam relativamente pequenas. Eu não verifiquei o limite exato, mas 976x1296px ainda está ok.

Com fotos maiores eu recebo:

Module PIL.Image, line 1559, in thumbnail
Module PIL.ImageFile, line 201, in load
IOError: image file is truncated (nn bytes not processed).

Eu testei muitos jpegs da minha câmera. Eu não acho que eles são todos truncados.

Aqui está o meu código:

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)

Como estou usando uma PUT_factory, não tenho um objeto de arquivo, estou usando os dados brutos da fábrica ou um objeto de imagem criado anteriormente (Zope).

Ouvi dizer que o PIL manipula dados de imagem de maneira diferente quando um determinado tamanho é excedido, mas não sei como ajustar meu código. Ou está relacionado com o carregamento lento do PIL?

questionAnswers(4)

yourAnswerToTheQuestion