Как создать две миниатюры с Django? - PullRequest
2 голосов
/ 15 января 2012

Я хочу создать две миниатюры (маленькую и среднюю)

Это мой код (с использованием python2.7 + django1.3):

import Image
...
def thumbnail(f,file_name,path):
    small = 35,35
    small_file_name = path+'/small_'+file_name
    medium = 310,235
    medium_file_name = path+'/medium_'+file_name

    small_im = Image.open(f)
    small_im.thumbnail(small)
    small_im.save(small_file_name)

    medium_im = Image.open(f)
    medium_im.thumbnail(medium)
    medium_im.save(medium_file_name)

Яполучаю эту ошибку:

IOError at /upload/
cannot identify image file

f - это сообщение FILES с другой страницы, f = request.FILES['photo']

Некоторые ошибки в последних трех строках, я должен комментировать последние три строки, это неошибка, но это не то, что я хочу.

Если я запускаю код в оболочке python, это не вызывает ошибок:

>>> from users.upload import thumbnail
>>> import Image
>>> f = '/home/david/1.jpg'
>>> file_name = 'test.jpg'
>>> path = '/home/david'
>>> thumbnail(f,file_name,path)

Я не понимаю, почему я 'Я получаю ошибку.

Ответы [ 2 ]

0 голосов
/ 21 января 2014

Вы можете попробовать сделать это:

def thumbnail(f,file_name,path):
 img = Image.open(f)
 small = 35,35
 small_file_name = path+'/small_'+file_name
 medium = 310,235
 medium_file_name = path+'/medium_'+file_name

 img.thumbnail(medium)
 img.save(medium_file_name)

 img.thumbnail(small)
 img.save(small_file_name)
0 голосов
/ 15 января 2012

У вас проблема, потому что f = request.FILES['photo'] - это не путь к файлу, как вы предполагаете.Вместо этого это Django UploadedFile.Вы должны записать этот файл на диск где-нибудь перед передачей его пути в PIL Image.open().

. Вы также можете попробовать передать temporary_file_path.

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...