Image resizing with django?
Question: I'm new to Django (and Python) and I have been trying to work out a few things
myself, before jumping into using other people's apps. I'm having trouble
understanding where things 'fit' in the Django (or Python's) way of doing
things. What I'm trying to work out is how to resize an image, once it's been
uploaded. I have my model setup nicely and plugged into the admin, and the
image uploads fine to the directory:

    
    
    from django.db import models
    
    # This is to list all the countries
    # For starters though, this will be just United Kingdom (GB)
    class Country(models.Model):
        name = models.CharField(max_length=120, help_text="Full name of country")
        code = models.CharField(max_length=2, help_text="This is the ISO 3166 2-letter country code (see: http://www.theodora.com/country_digraphs.html)")
        flag = models.ImageField(upload_to="images/uploaded/country/", max_length=150, help_text="The flag image of the country.", blank=True)
    
        class Meta:
            verbose_name_plural = "Countries"
    
        def __unicode__(self):
            return self.name
    

The thing I'm now having trouble with is taking that file and making a new
file into a thumbnail. Like I say, I'd like to know how to do it without using
others' apps (for now). I have got this code from DjangoSnippets:

    
    
    from PIL import Image
    import os.path
    import StringIO
    
    def thumbnail(filename, size=(50, 50), output_filename=None):
        image = Image.open(filename)
        if image.mode not in ('L', 'RGB'):
            image = image.convert('RGB')
        image = image.resize(size, Image.ANTIALIAS)
    
        # get the thumbnail data in memory.
        if not output_filename:
            output_filename = get_default_thumbnail_filename(filename)
        image.save(output_filename, image.format) 
        return output_filename
    
    def thumbnail_string(buf, size=(50, 50)):
        f = StringIO.StringIO(buf)
        image = Image.open(f)
        if image.mode not in ('L', 'RGB'):
            image = image.convert('RGB')
        image = image.resize(size, Image.ANTIALIAS)
        o = StringIO.StringIO()
        image.save(o, "JPEG")
        return o.getvalue()
    
    def get_default_thumbnail_filename(filename):
        path, ext = os.path.splitext(filename)
        return path + '.thumb.jpg'
    

...but this has ultimately confused me... As I don't know how this 'fits in'
to my Django app? And really, is it the best solution for simply making a
thumbnail of an image that has been successfully uploaded? Can anyone possibly
show me a good, solid, decent way that a beginner like me can learn to do this
properly? As in, knowing where to put that sort of code (models.py? forms.py?
...) and how it would work in context? ... I just need a bit of help
understanding and working this problem out.

Thank you!


Answer: If it's OK for you, there is a Django application ready, doing exactly what
you want: <https://github.com/sorl/sorl-thumbnail>

