diff -r 6641e941ef1e -r ff1a9aa48cfd app/django/core/files/images.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/django/core/files/images.py Tue Oct 14 16:00:59 2008 +0000 @@ -0,0 +1,42 @@ +""" +Utility functions for handling images. + +Requires PIL, as you might imagine. +""" + +from django.core.files import File + +class ImageFile(File): + """ + A mixin for use alongside django.core.files.base.File, which provides + additional features for dealing with images. + """ + def _get_width(self): + return self._get_image_dimensions()[0] + width = property(_get_width) + + def _get_height(self): + return self._get_image_dimensions()[1] + height = property(_get_height) + + def _get_image_dimensions(self): + if not hasattr(self, '_dimensions_cache'): + self._dimensions_cache = get_image_dimensions(self) + return self._dimensions_cache + +def get_image_dimensions(file_or_path): + """Returns the (width, height) of an image, given an open file or a path.""" + from PIL import ImageFile as PILImageFile + p = PILImageFile.Parser() + if hasattr(file_or_path, 'read'): + file = file_or_path + else: + file = open(file_or_path, 'rb') + while 1: + data = file.read(1024) + if not data: + break + p.feed(data) + if p.image: + return p.image.size + return None