
vÅÏ^	
  ã               @   sW   d  Z  d d l Z d d l Z d d l m Z Gd d „  d e ƒ Z d d d „ Z d S)	zO
Utility functions for handling images.

Requires Pillow as you might imagine.
é    N)ÚFilec               @   sF   e  Z d  Z d Z e d d „  ƒ Z e d d „  ƒ Z d d „  Z d S)	Ú	ImageFilez€
    A mixin for use alongside django.core.files.base.File, which provides
    additional features for dealing with images.
    c             C   s   |  j  ƒ  d S)Nr   )Ú_get_image_dimensions)Úself© r   ú:/tmp/pip-build-8lau8j11/django/django/core/files/images.pyÚwidth   s    zImageFile.widthc             C   s   |  j  ƒ  d S)Né   )r   )r   r   r   r   Úheight   s    zImageFile.heightc             C   s>   t  |  d ƒ s7 |  j } |  j ƒ  t |  d | ƒ|  _ |  j S)NÚ_dimensions_cacheÚclose)ÚhasattrÚclosedÚopenÚget_image_dimensionsr   )r   r   r   r   r   r      s
    	
zImageFile._get_image_dimensionsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyr   r
   r   r   r   r   r   r      s   r   Fc       	      C   sO  d d l  m } | j ƒ  } t |  d ƒ rM |  } | j ƒ  } | j d ƒ n t |  d ƒ } d } zÅ d } x´ | j | ƒ } | s„ Py | j | ƒ Wni t	 j
 k
 rÛ } z! | j d j d ƒ rÆ n ‚  WYd d } ~ Xn& t j
 k
 rï Yn t k
 r Yn X| j r| j j S| d	 9} qn Wd
 SWd | r=| j ƒ  n | j | ƒ Xd S)z®
    Return the (width, height) of an image, given an open file or a path.  Set
    'close' to True to close the file at the end if it is initially in an open
    state.
    r   )r   ÚreadÚrbTi   zError -5Né   )NN)ZPILr   ÚParserr   ÚtellÚseekr   r   ÚfeedÚzlibÚerrorÚargsÚ
startswithÚstructÚRuntimeErrorÚimageÚsizer   )	Zfile_or_pathr   ZPillowImageFileÚpÚfileZfile_posÚ
chunk_sizeÚdataÚer   r   r   r   !   s>    	
r   )r   r!   r   Zdjango.core.filesr   r   r   r   r   r   r   Ú<module>   s
   