получил OSError при использовании подушки для работы с моим изображением jpg

Я публикую изображение в формате jpg на своем веб-сайте (сборка на django), но я получаю «OSError в URL-адресе XXXX / XXX сломанный поток данных при чтении файла изображения», когда я использую подушку, чтобы справиться с этим

это происходит при запуске кода на сервере:

if request.FILES:
    img = request.FILES['img']
    ftype = img.content_type.split('/')[1]
    image = Image.open(img)
    imagefit = ImageOps.fit(image, (200, 200), Image.ANTIALIAS)
    fpath = MEDIA_ROOT+'avatar/'+user.username+'.'+ftype
    getpath = 'avatar/'+user.username+'.'+ftype
    imagefit.save(fpath,ftype)

и трассировка:

view:
imagefit = ImageOps.fit(image, (200, 200), Image.ANTIALIAS) 
/PIL/ImageOps.py in fit:
(leftSide, topSide, leftSide + cropWidth, topSide + cropHeight) 
/PIL/Image.py in crop:
self.load() 
/PIL/ImageFile.py in load:
raise_ioerror(e) 
/PIL/ImageFile.py in raise_ioerror:
raise IOError(message + " when reading image file") 

message   'broken data stream'
error   -2

img <InMemoryUploadedFile: 169902.jpg (image/jpeg)>

ftype   'jpeg'
image   <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=1650x2550 at 0xB5CCBECC>

Я использую Ubuntu 13.10 (32 бит), python3, подушку 2.4.0, и я установил libjpeg8-dev, python3-dev python3-imaging и переустановил подушку (в virtualenv), но не исправил


person stackniu    schedule 03.05.2014    source источник
comment
Кажется, что в зависимости от функций, используемых вашим конкретным файлом JPEG, вам нужно либо повысить, либо понизить версию libjpeg. Этот ответ указывает, что может помочь понижение до libjpeg 6b (и переустановите PIL снова). Вы также можете попытаться узнать, какие функции используются в вашем файле JPEG, например. с identify от ImageMagick.   -  person Lukas Graf    schedule 03.05.2014
comment
уже попробовал, но ничего не изменилось...   -  person stackniu    schedule 03.05.2014


Ответы (1)


Попробуйте установить libjpeg, а затем переустановите подушку:

sudo apt-get install libjpeg8 libjpeg8-dev

pip install --force-reinstall Pillow

Если версия недоступна, попробуйте следующее, чтобы узнать, какие версии доступны:

apt-cache search libjpeg
person Chris Montanaro    schedule 03.05.2014
comment
Не удалось найти пакет libjpeg - person stackniu; 03.05.2014