PIL Image.thumbnail() завершается с неизвестным IOError

У меня есть приложение Django, которое собирает данные через многокомпонентную форму, включая значения POST и FILES. Данные формы правильно принимаются в моих представлениях Django, и я пытаюсь обработать файлы изображений, переданные через форму, чтобы создать миниатюры с помощью PIL.Image. Однако, когда я вызываю метод Image.thumbnail() (или, в этом отношении, любой метод, кроме Image.open ()), я получаю IOError, которую я не могу исследовать дальше.

Вот код:

from PIL import Image
import io
import os
from django.core.files.uploadedfile import SimpleUploadedFile
from django.core.files.base import ContentFile
from django.conf import settings

def generate_thumbnail(file):
 if 'image' in file.content_type:
     print "about to save the thumbnail"
     file_content= ContentFile(file.read())
     print "file read"
     full_filename = os.path.join(settings.MEDIA_ROOT, file.name)
     print "path selected"
     fout = open(full_filename, 'wb+')
     for chunk in file_content.chunks():
         fout.write(chunk)
     fout.close()
     print " file saved" 
     im = Image.open(open(full_filename, 'rb'))
     print im.getbands()
     #no problem up to this point
     try:
         size = 128,128
         thumb = im.thumbnail(size)
     except IOError as e:
         print "I/O error({0}): {1}".format(e.errno, e.strerror)

Сценарий вызывает исключение IOError, но печать выдает мне только "I/O error(None): None". Обратите внимание, что fout.write () успешно записывает мой файл в выбранный путь, и что Image.open (), а также Image.getbands() работают успешно (последний правильно возвращает, ('R', 'G', ' В ')). Но все, что вызывает Image.load (), в данном случае Image.thumbnail(), похоже, не работает.

Есть идеи?

1 ответ

(Перемещение ответа из поля вопроса в поле ответа)

Я изменил исключение, чтобы напечатать IOError как текст, и получил "декодер jpeg недоступен". Тем не менее, brew install libjpeg показал, что библиотека уже была установлена. По какой-то причине, Подушка не видела этого. Поэтому я удалил и переустановил подушку с pip uninstall pillow а также pip install pillow,

Другие вопросы по тегам