Django上传图片生成成缩略图的类详解编程语言

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

from PIL import Image 
from cStringIO import StringIO 
from django.core.files.uploadedfile import SimpleUploadedFile 
  
class 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)

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/8387.html

(0)
上一篇 2021年7月18日 19:33
下一篇 2021年7月18日 19:33

相关推荐

发表回复

登录后才能评论