Django上传图片生成成缩略图的类,,这段代码通过pil生成缩


这段代码通过pil生成缩略图,主要通过save函数保存缩略图,自定义了图片的保存位置和原图片位置,可以自己更改,可以指定缩略图的大小。

from PIL import Imagefrom cStringIO import StringIOfrom django.core.files.uploadedfile import SimpleUploadedFileclass Photo(models.Model):    #from sharejs.com    title = models.CharField(max_length = 100)    image = models.ImageField(upload_to ="photos/originals/%Y/%m/")    image_height = models.IntegerField()    image_width = models.IntegerField()    thumbnail = models.ImageField(upload_to="photos/thumbs/%Y/%m/")    thumbnail_height = models.IntegerField()    thumbnail_width = models.IntegerField()    caption = models.CharField(max_length = 250, blank =True)    def __str__(self):        return "%s"%self.title    def __unicode__(self):        return self.title    def save(self, force_update=False, force_insert=False, thumb_size=(180,300)):        image = Image.open(self.image)        if image.mode not in ('L', 'RGB'):            image = image.convert('RGB')        # save the original size        self.image_width, self.image_height = image.size        image.thumbnail(thumb_size, Image.ANTIALIAS)        # save the thumbnail to memory        temp_handle = StringIO()        image.save(temp_handle, 'png')        temp_handle.seek(0) # rewind the file        # save to the thumbnail field        suf = SimpleUploadedFile(os.path.split(self.image.name)[-1],                                 temp_handle.read(),                                 content_type='image/png')        self.thumbnail.save(suf.name+'.png', suf, save=False)        self.thumbnail_width, self.thumbnail_height = image.size        # save the image object        super(Photo, self).save(force_update, force_insert)

评论关闭