如何使用django创建两个缩略图



我想创建两个缩略图(一个小缩略图和一个中等缩略图)

这是我的代码(使用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 shell中运行代码,它不会引发错误:

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

我不明白为什么我会出错。

您遇到了一个问题,因为f = request.FILES['photo']不是您认为的文件路径,而是Django UploadedFile。在将该文件的路径传递给PIL Image.open()之前,您应该将其写入磁盘的某个位置。

您也可以尝试通过temporary_file_path

您可以尝试这样做:

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)

最新更新