]> git.sommitrealweird.co.uk Git - sommitrealweird.git/blobdiff - sommitrealweird/generic/helpers.py
First draft image gallery
[sommitrealweird.git] / sommitrealweird / generic / helpers.py
diff --git a/sommitrealweird/generic/helpers.py b/sommitrealweird/generic/helpers.py
new file mode 100644 (file)
index 0000000..6c85aa1
--- /dev/null
@@ -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)
+