Mercurial > public > sg101
diff core/image.py @ 581:ee87ea74d46b
For Django 1.4, rearranged project structure for new manage.py.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Sat, 05 May 2012 17:10:48 -0500 |
parents | gpp/core/image.py@1ba2c6bf6eb7 |
children | 234726f5a47a |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/image.py Sat May 05 17:10:48 2012 -0500 @@ -0,0 +1,43 @@ +""" +This file contains common utility functions for manipulating images for +the rest of the applications in the project. +""" +from PIL import ImageFile +from PIL import Image + + +def parse_image(file): + """ + Returns a PIL Image from the supplied Django file object. + Throws IOError if the file does not parse as an image file or some other + I/O error occurred. + + """ + parser = ImageFile.Parser() + for chunk in file.chunks(): + parser.feed(chunk) + image = parser.close() + return image + + +def downscale_image_square(image, size): + """ + Scale an image to the square dimensions given by size (in pixels). + The new image is returned. + If the image is already smaller than (size, size) then no scaling + is performed and the image is returned unchanged. + + """ + # don't upscale + if (size, size) >= image.size: + return image + + (w, h) = image.size + if w > h: + diff = (w - h) / 2 + image = image.crop((diff, 0, w - diff, h)) + elif h > w: + diff = (h - w) / 2 + image = image.crop((0, diff, w, h - diff)) + image = image.resize((size, size), Image.ANTIALIAS) + return image