author | Madhusudan.C.S <madhusudancs@gmail.com> |
Tue, 15 Sep 2009 22:01:16 +0200 | |
changeset 2926 | effa1cfb3607 |
parent 323 | ff1a9aa48cfd |
permissions | -rw-r--r-- |
""" 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