text: # -*- coding: utf-8 -*-
  
  #######################################################################
  #
  # Put this file in yourapp/modules/images.py
  #
  # Given the model
  #
  # db.define_table("table_name", Field("picture", "upload"),
  #                 Field("thumbnail", "upload"))
  #
  # to resize the picture on upload
  #
  # from images import RESIZE
  #
  # db.table_name.picture.requires = RESIZE(200, 200)
  #
  # to store original image in picture and create a thumbnail
  # in 'thumbnail' field
  #
  # from images import THUMB
  # db.table_name.thumbnail.compute = lambda row: THUMB(row.picture, 200, 200)
  
  #########################################################################
  from gluon import current
  
  
  class RESIZE(object):
  
      def __init__(self, nx=160, ny=80, quality=100, padding = False
                   error_message=' image resize'):
          (self.nx, self.ny, self.quality, self.error_message, self.padding) = (
              nx, ny, quality, error_message, padding)
  
      def __call__(self, value):
          if isinstance(value, str) and len(value) == 0:
              return (value, None)
          from PIL import Image
          import cStringIO
          try:
              img = Image.open(value.file)
              img.thumbnail((self.nx, self.ny), Image.ANTIALIAS)
              s = cStringIO.StringIO()
              if self.padding:
                  background = Image.new('RGBA', (self.nx, self.ny), (255, 255, 255, 0))
                  background.paste(
                      img,
                      ((self.nx - img.size[0]) / 2, (self.ny - img.size[1]) / 2))
                  background.save(s, 'JPEG', quality=self.quality)
              else:
                  img.save(s, 'JPEG', queality=self.quality)
              s.seek(0)
              value.file = s
          except:
              return (value, self.error_message)
          else:
              return (value, None)
  
  
  def THUMB(image, nx=120, ny=120, gae=False, name='thumb'):
      if image:
          if not gae:
              request = current.request
              from PIL import Image
              import os
              img = Image.open(os.path.join(request.folder, 'uploads', image))
              img.thumbnail((nx, ny), Image.ANTIALIAS)
              root, ext = os.path.splitext(image)
              thumb = '%s_%s%s' % (root, name, ext)
              img.save(request.folder + 'uploads/' + thumb)
              return thumb
          else:
              return image
  