parameters: (tablename, image, box, fit=True, name="thumb")
docstring: Downsample the image.
      http://www.web2pyslices.com/slice/show/1522/generate-a-thumbnail-that-fits-in-a-box
  
      Modified to respect uploadseparate=True differences
  
       @param img: Image -  an Image-object
       @param box: tuple(x, y) - the bounding box of the result image
       @param fit: boolean - crop the image to fill the box
docstring_summary: Downsample the image.
      http://www.web2pyslices.com/slice/show/1522/generate-a-thumbnail-that-fits-in-a-box
docstring_tokens: Downsample the image . http : // www . web2pyslices . com / slice / show / 1522 / generate - a - thumbnail - that - fits - in - a - box
function: def SMARTHUMB(tablename, image, box, fit=True, name="thumb"):
      '''Downsample the image.
      http://www.web2pyslices.com/slice/show/1522/generate-a-thumbnail-that-fits-in-a-box
  
      Modified to respect uploadseparate=True differences
  
       @param img: Image -  an Image-object
       @param box: tuple(x, y) - the bounding box of the result image
       @param fit: boolean - crop the image to fill the box
      '''
      if image:
          from PIL import Image
          import os
          from gluon.tools import current, web2py_uuid
          request = current.request
          img = Image.open(upload_fullpath(tablename, image))
          #preresize image with factor 2, 4, 8 and fast algorithm
          factor = 1
          while img.size[0] / factor > 2 * box[0] and img.size[1] * 2 / factor > 2 * box[1]:
              factor *= 2
          if factor > 1:
              img.thumbnail((img.size[0] / factor, img.size[1] / factor), Image.NEAREST)
   
          #calculate the cropping box and get the cropped part
          if fit:
              x1 = y1 = 0
              x2, y2 = img.size
              wRatio = 1.0 * x2 / box[0]
              hRatio = 1.0 * y2 / box[1]
              if hRatio > wRatio:
                  y1 = int(y2 / 2 - box[1] * wRatio / 2)
                  y2 = int(y2 / 2 + box[1] * wRatio / 2)
              else:
                  x1 = int(x2 / 2 - box[0] * hRatio / 2)
                  x2 = int(x2 / 2 + box[0] * hRatio / 2)
              img = img.crop((x1, y1, x2, y2))
   
          #Resize the image with best quality algorithm ANTI-ALIAS
          img.thumbnail(box, Image.ANTIALIAS)
   
          root, ext = os.path.splitext(image)
          thumbname = '%s.thumbnail.%s.%s%s' % (tablename, web2py_uuid().replace('-', '')[-16:], web2py_uuid().replace('-', '')[-16:], ext)
          img.save(upload_fullpath(tablename, thumbname, makedirs=True))        
  
          return thumbname
function_tokens: def SMARTHUMB ( tablename , image , box , fit = True , name = "thumb" ) : if image : from PIL import Image import os from gluon . tools import current , web2py_uuid request = current . request img = Image . open ( upload_fullpath ( tablename , image ) ) #preresize image with factor 2, 4, 8 and fast algorithm factor = 1 while img . size [ 0 ] / factor > 2 * box [ 0 ] and img . size [ 1 ] * 2 / factor > 2 * box [ 1 ] : factor *= 2 if factor > 1 : img . thumbnail ( ( img . size [ 0 ] / factor , img . size [ 1 ] / factor ) , Image . NEAREST ) #calculate the cropping box and get the cropped part if fit : x1 = y1 = 0 x2 , y2 = img . size wRatio = 1.0 * x2 / box [ 0 ] hRatio = 1.0 * y2 / box [ 1 ] if hRatio > wRatio : y1 = int ( y2 / 2 - box [ 1 ] * wRatio / 2 ) y2 = int ( y2 / 2 + box [ 1 ] * wRatio / 2 ) else : x1 = int ( x2 / 2 - box [ 0 ] * hRatio / 2 ) x2 = int ( x2 / 2 + box [ 0 ] * hRatio / 2 ) img = img . crop ( ( x1 , y1 , x2 , y2 ) ) #Resize the image with best quality algorithm ANTI-ALIAS img . thumbnail ( box , Image . ANTIALIAS ) root , ext = os . path . splitext ( image ) thumbname = '%s.thumbnail.%s.%s%s' % ( tablename , web2py_uuid ( ) . replace ( '-' , '' ) [ - 16 : ] , web2py_uuid ( ) . replace ( '-' , '' ) [ - 16 : ] , ext ) img . save ( upload_fullpath ( tablename , thumbname , makedirs = True ) ) return thumbname