Image model with thumbnail

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
from PIL import Image
from cStringIO import StringIO
from django.core.files.uploadedfile import SimpleUploadedFile

class Photo(models.Model):
    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)

More like this

  1. ImageWithThumbsField by zenx 4 years, 4 months ago
  2. Generate thumbnails on save by peterw 4 years, 6 months ago
  3. django-thumbs black&white support by rdugo 8 months ago
  4. Admin list thumbnail by theetderks 6 years ago
  5. Crop and scale image to a given size by rpw 6 years ago

Comments

(Forgotten your password?)