diff options
Diffstat (limited to 'webapp/django/core/files/images.py')
-rw-r--r-- | webapp/django/core/files/images.py | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/webapp/django/core/files/images.py b/webapp/django/core/files/images.py new file mode 100644 index 0000000000..5ddcdd4322 --- /dev/null +++ b/webapp/django/core/files/images.py @@ -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 |