Python PIL „IOError: plik obrazu obcięty” z dużymi obrazami

Myślę, że ten problem nie jest związany z Zope. Niemniej jednak wyjaśnię, co próbuję zrobić:

Używam PUT_factory w Zope, aby przesyłać obrazy do ZODB na FTP. Przesłany obraz jest zapisywany jako obraz Zope wewnątrz nowo utworzonego obiektu kontenera. Działa to dobrze, ale chcę zmienić rozmiar obrazu, jeśli przekracza określony rozmiar (szerokość i wysokość). Używam więc funkcji miniatur PIL do zmiany ich rozmiaru, to jest do 200x200. Działa to dobrze, o ile przesłane obrazy są stosunkowo małe. Nie sprawdziłem dokładnego limitu, ale 976x1296px jest nadal w porządku.

Z większymi zdjęciami otrzymuję:

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

Przetestowałem wiele plików JPEG z mojego aparatu. Nie sądzę, żeby wszystkie były ścięte.

Oto mój kod:

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)

Ponieważ używam PUT_factory, nie mam obiektu pliku, używam surowych danych z fabryki lub wcześniej utworzonego (Zope) obiektu obrazu.

Słyszałem, że PIL obsługuje dane obrazu w inny sposób, gdy określony rozmiar zostanie przekroczony, ale nie wiem, jak dostosować mój kod. Czy jest to związane z leniwym ładowaniem PIL?

questionAnswers(4)

yourAnswerToTheQuestion