X-Git-Url: https://git.sommitrealweird.co.uk/sommitrealweird.git/blobdiff_plain/1487722766c9e649c95a6f25ae29b0680bdc1be0..d82db041f520a51eccee6788ebc3a494e2a4280f:/sommitrealweird/generic/helpers.py diff --git a/sommitrealweird/generic/helpers.py b/sommitrealweird/generic/helpers.py new file mode 100644 index 0000000..6c85aa1 --- /dev/null +++ b/sommitrealweird/generic/helpers.py @@ -0,0 +1,100 @@ +from django.conf import settings +from PIL import Image +import os, sys + +def make_thumbnail(imagefile,width=None,height=None): + # first check that the thumbnail image doesn't already exist + # and if it does that it's newer than the origional image + + base_dir = settings.MEDIA_ROOT + thumbs_dir = base_dir + if not thumbs_dir.endswith("/"): + thumbs_dir = "%s/" %(thumbs_dir,) + base_dir = "%s/" %(base_dir,) + + try: + thumbs_dir = "%s%s/" %(thumbs_dir, settings.THUMBS_DIRECTORY) + thumbsdirectory = settings.THUMBS_DIRECTORY + except: + thumbs_dir = "%sthumbs/" %(thumbs_dir,) + thumbsdirectory = "thumbs" + + if width != None: + try: + thumb = os.stat("%sw%d/%s" % (thumbs_dir, width, imagefile)) + pic = os.stat("%s%s" % (base_dir, imagefile)) + if thumb.st_ctime < pic.st_ctime: + # regenerate the icon + img = Image.open("%s%s" %(base_dir, imagefile)) + (curwidth,curheight) = img.size + + newwidth = width + newheight = int((newwidth * curheight) / curwidth) + + newimg = img.resize((newwidth, newheight)) + newimg.save("%sw%d/%s" %(thumbs_dir, width, imagefile)) + + return "%s%s/w%d/%s" %(settings.MEDIA_URL, thumbsdirectory, width, imagefile) + else: + # we have a winner! + return "%s%s/w%d/%s" %(settings.MEDIA_URL, thumbsdirectory, width, imagefile) + except: + # well, there's not one there. feh. sucks. + try: + directory_to_create = imagefile[:imagefile.rindex(os.sep)] + img = Image.open("%s%s" %(base_dir, imagefile)) + if not os.path.isdir("%sw%d/%s" %(thumbs_dir, width, directory_to_create)): + os.makedirs("%sw%d/%s" %(thumbs_dir, width, directory_to_create)) + (curwidth,curheight) = img.size + + newwidth = width + newheight = int((newwidth * curheight) / curwidth) + + newimg = img.resize((newwidth, newheight)) + newimg.save("%sw%d/%s" %(thumbs_dir, width, imagefile)) + + return "%s%s/w%d/%s" %(settings.MEDIA_URL, thumbsdirectory, width, imagefile) + except Exception, e: + sys.stderr.write("Got exception: %s" %(e,)) + + elif height != None: + try: + thumb = os.stat("%sh%d/%s" % (thumbs_dir, height, imagefile)) + pic = os.stat("%s%s" % (base_dir, imagefile)) + if thumb.st_ctime < pic.st_ctime: + # regenerate the icon + img = Image.open("%s%s" %(base_dir, imagefile)) + (curwidth,curheight) = img.size + + newheight = height + newheight = int((newheight * curwidth) / curheight) + + newimg = img.resize((newwidth, newheight)) + newimg.save("%sh%d/%s" %(thumbs_dir, height, imagefile)) + + return "%s%s/h%d/%s" %(settings.MEDIA_URL, thumbsdirectory, height, imagefile) + else: + # we have a winner! + return "%s%s/h%d/%s" %(settings.MEDIA_URL, thumbsdirectory, height, imagefile) + except: + # well, there's not one there. feh. sucks. + try: + directory_to_create = imagefile[:imagefile.rindex(os.sep)] + img = Image.open("%s%s" %(base_dir, imagefile)) + os.makedirs("%sh%h/%s" %(thumbs_dir, height, directory_to_create)) + (curwidth,curheight) = img.size + + newheight = height + newwidth = int((newheight * curwidth) / curheight) + + newimg = img.resize((newwidth, newheight)) + newimg.save("%sh%d/%s" %(thumbs_dir, height, imagefile)) + + return "%s%s/h%d/%s" %(settings.MEDIA_URL, thumbsdirectory, height, imagefile) + except: + pass + + # if everything fails, we'll return the origional image URL + # this is for simpilicity + return "%s%s" %(settings.MEDIA_URL, imagefile) +