title: Image resizing with django?
body: <p>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:</p>
  
  <pre><code>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
  </code></pre>
  
  <p>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:</p>
  
  <pre><code>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'
  </code></pre>
  
  <p>...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.</p>
  
  <p>Thank you!</p>