
7ec           @` s  d  d l  m Z d  d l  m Z d  d l  m Z d  d l  m Z d  d l Z d  d l Z d  d l m Z	 d  d l
 m Z d  d l Z d  d l m Z m Z d  d	 l m Z d  d
 l m Z m Z d  d l m Z m Z m Z d e j Z d g Z d   Z d   Z d   Z d   Z d   Z d   Z  d   Z! d   Z" d d d d d  Z$ d   Z% d d  Z& d   Z' d   Z( d   Z) d   Z* e+ d d$ d% d& d d d d d e e d d d d d e+ e, d  Z- e d d   d!    Z. d"   Z/ e, d#  Z0 d S('   i    (   t   absolute_import(   t   division(   t   print_function(   t   unicode_literalsN(   t   Image(   t	   lru_cache(   t   StringIOt   BytesIO(   t   settings(   t   IMAGE_DEFAULT_QUALITYt   IMAGE_DEFAULT_FORMAT(   t   MEDIA_STORAGEt   STATIC_STORAGEt   IMAGE_CACHE_STORAGEu   %s/_internal/u   PNGc         C` s>   |  d k r |  d 9}  n d t  |  d  d }  t |  d  S(   Ngsåi?gףp=
)@gzG?gª?g)\(?g     o@(   t   powt   round(   t   value(    (    s5   /usr/local/lib/python2.7/dist-packages/image/utils.pyt   power_to_rgb   s    c         C` sD   t  |   d }  |  d k r) |  d }  n t |  d d d  }  |  S(   Ng     o@g?ܵ?gףp=
)@g)\(?gzG?g333333@(   t   floatR   (   R   (    (    s5   /usr/local/lib/python2.7/dist-packages/image/utils.pyt   rgb_to_power   s
    c   	      C` s  | d } |  d } | d k r | d k r | | } | | } | | } |  d | | d | |  d | | d | |  d | | d | | | | | f S| | } | | } | | } |  d | | d | |  d | | d | |  d | | d | | | | | f Sd  S(   Ni   g      ?i    i   i   (    (	   t   pixelt   rgbat	   x_ammountt   x_displacementt   at   pat   total_ammountt   rgba_ammountt   pixel_ammount(    (    s5   /usr/local/lib/python2.7/dist-packages/image/utils.pyt   add_rgba_to_pixel'   s"    







c         C` s   |  j  \ } } t |  t |  } | r: | } | } n t | |  } t | |  } | }	 |	 | }
 |
 | k r | }
 |
 | }	 n  |  j t |	  t |
  f t j  }  |  S(   N(   t   sizeR   t   mint   resizet   intt   pilt	   ANTIALIAS(   t   imgt   widtht   heightt   forcet	   src_widtht
   src_heightt	   src_ratiot	   max_widtht
   max_heightt	   dst_widtht
   dst_height(    (    s5   /usr/local/lib/python2.7/dist-packages/image/utils.pyt   resizeScaleB   s    	
'c         C` s  | } | } | s. |  j  | | f t j  n|  j \ } } t |  t |  }	 | | }
 } t |
  t |  } | |	 k  r | } | | } t | |  d } d } n* | } | | } d } t | |  d } | j d  \ } } t |  } t |  } t t d | | | d  | |  } t t d | | | d  | |  } |  j t	 |  t	 |  t	 |  t	 |  t	 |  t	 |  f  }  |  j
 t	 |
  t	 |  f t j  }  |  S(   u   
    # Esto no hace nada perceptible
    RATIO = 2
    while img.size[0] / RATIO > width or img.size[1] / RATIO > height:
        img = img.resize((int(img.size[0]/RATIO), int(img.size[1]/RATIO)), pil.ANTIALIAS)
    i   i    u   ,(   t	   thumbnailR"   R#   R   R   t   splitR   t   maxt   cropR!   R    (   R$   R%   R&   t   centerR'   R+   R,   R(   R)   R*   R-   R.   t	   dst_ratiot   crop_heightt
   crop_widtht   x_offsett   y_offsett   center_xt   center_y(    (    s5   /usr/local/lib/python2.7/dist-packages/image/utils.pyt
   resizeCropZ   s<    
	
A'c      
   C` s  | s | d k r d  S|  j  d k r8 |  j d  }  n  y( t t d | d d !d   d } Wn t k
 ry d } n Xy( t t d | d d	 !d   d } Wn t k
 r d } n Xy( t t d | d	 d
 !d   d } Wn t k
 r d } n Xy( t t d | d
 d !d   d } Wn t k
 r?d } n Xy$ t t d | d d !d   } Wn t k
 r}d } n X| d k r| d k s| d k s| d k s| d k r|  j   } | d k rxt |  j d  D] } x t |  j d  D] }	 | |	 | f }
 t t |
 d  |  t t |
 d  |  t t |
 d  |  t t |
 d  |  f | |	 | f <q WqWq| d } d | } | | 9} | | 9} | | 9} | | 9} x t |  j d  D] } x t |  j d  D] }	 | |	 | f }
 t t |
 d  | t |
 d  |  t t |
 d  | t |
 d  |  t t |
 d  | t |
 d  |  t t |
 d  | t |
 d  |  f | |	 | f <qWqWn  d  S(   Nu   Noneu   RGBAu   0x%si    i   i   g     o@g      ?i   i   i   i
   g        i   i   (   t   modet   convertR   R!   t
   ValueErrort   loadt   rangeR   (   R$   t   tintt   tint_redt
   tint_greent	   tint_bluet
   tint_alphat	   intensityt   pixelst   yt   xt   datat   intensity_inv(    (    s5   /usr/local/lib/python2.7/dist-packages/image/utils.pyt   do_tint   s^    (
(
(
(
$
<2





)))c         C` s   |  j  d  j  d  S(   Nu   LAu   RGBA(   R>   (   R$   (    (    s5   /usr/local/lib/python2.7/dist-packages/image/utils.pyt   do_grayscale   s    c         C` s\   | j  d k r! | j d  } n  t j d |  j d d } | j | |  t j |  |  S(   Nu   RGBAt   colori   i    (   i   i   i   i    (   R=   R>   R"   t   newR   t   pastet   alpha_composite(   R$   t   overlayt   positiont   overlay_full(    (    s5   /usr/local/lib/python2.7/dist-packages/image/utils.pyt   do_paste   s
    c         C` s  | s
 |  S| d k r1 t  j t j |   } n t  j t j |   } |  j \ } } | j \ }	 }
 t |	  t |
  } | r=| j d  \ } } t t t | j	    |   }	 t t t | j	    |   }
 |	 d k  r |
 | }	 n |
 d k  r|	 | }
 n  t
 | |	 |
 | d |  } | j \ }	 }
 n t } |	 | k rt| }	 t t |  |  }
 t } n  |
 | k rt t |  |  }	 | }
 t } n  | rt
 | |	 |
 | d |  } | j \ }	 }
 n  | rt | |  n  | s!t | |	 d  } t | |
 d  } nM| j d  \ } } | j	   } | j	   } | d k rqt | |	 d  } nm d | k rd t | j d d  j	    } t t | |  |	  } n" t |  } t t | |   } | d k rt | |
 d  } nm d | k rLd t | j d d  j	    } t t | |  |
  } n" t |  } t t | |   } t |  | | | f  }  |  S(	   Nu   mediau   ,i    u   /i   u    u   !g      ?(   R"   t   openR   R   R   R   R1   R!   R   t   stripR/   t   Falset   TrueRM   t   replaceRV   (   R$   t   overlay_patht   overlay_sourcet   overlay_tintt   overlay_sizet   overlay_positionRS   t   iwt   iht   owt   oht   overlay_ratiot   twt   tht   have_to_scalet   target_xt   target_yt   txt   tyt	   x_percentt	   y_percent(    (    s5   /usr/local/lib/python2.7/dist-packages/image/utils.pyt
   do_overlay  sl    ""		""c         C` s7  d } x*| D]"} y | | } Wn t  t f k
 r@ d  } n X| d k rV d  } n  y | | }	 Wn t  t f k
 r d }	 n Xy | | }
 Wn t  t f k
 r d  }
 n X|
 d k r d  }
 n  y | | } Wn t  t f k
 r d  } n X| d k r
d  } n  t |  | |	 | |
 |  }  | d 7} q W|  S(   Ni    u   Noneu   statici   (   t
   IndexErrort	   TypeErrort   NoneRo   (   R$   t   overlayst   overlay_tintst   overlay_sourcest   overlay_sizest   overlay_positionst   overlay_indexRS   R^   R]   R_   R`   (    (    s5   /usr/local/lib/python2.7/dist-packages/image/utils.pyt   do_overlaysg  s6    
	

	
	c         C` s  | s
 |  S| d k r: t  j t j |   j d  } n! t  j t j |   j d  } | d k r |  j \ } } | j \ } } | | k s | | k r| j | | f t  j  } qn0|  j \ } } | j \ }	 }
 t |	  t |
  } t	 } |	 | k r#| }	 t
 t |  |  }
 n  |
 | k rNt
 t |  |  }	 | }
 n  |	 | k sf|
 | k rot } n  | r| j |	 |
 f t  j  } t  j d | | f  } t | | t
 | |	 d  t
 | |
 d  f  } | j \ }	 }
 n  | j   \ } } } } |  j |  d  S(   Nu   mediau   RGBAu   distorti   (   R"   RW   R   R>   R   R   R    R#   R   RY   R!   RZ   RP   RV   R1   t   putalpha(   R$   t	   mask_patht   mask_sourcet	   mask_modet   maskRa   Rb   t   mwt   mhRc   Rd   Re   Rh   t   nmaskt   rt   gt   bR   (    (    s5   /usr/local/lib/python2.7/dist-packages/image/utils.pyt   do_mask  s:    $!!		4c   
      C` s   | s
 |  S|  } t  d | d d !d  t  d | d d !d  t  d | d d !d  t  d | d d !d  f } t j d | | f |  }  |  j \ } } | j \ } }	 t |  | t  | | d  t  | |	 d  f  }  |  S(	   Nu   0x%si    i   i   i   i   i   u   RGBA(   R!   R"   RP   R   RV   (
   R$   t   fillR%   R&   RS   t
   fill_colorRa   Rb   Rc   Rd   (    (    s5   /usr/local/lib/python2.7/dist-packages/image/utils.pyt   do_fill  s    4c         C` s   | s
 |  Sy9 t  |  d } | d k r2 d } n  | d k rB |  SWn t k
 rW d  SX|  j \ } } |  j t t t  |  j d  d |   t t t  |  j d  d |   f t j  t |  d | |  }  |  S(   Ng       @g?g        i    g      ?i   u   ffffff00(	   R   R?   R   R0   R!   R   R"   R#   R   (   R$   t   paddingRa   Rb   (    (    s5   /usr/local/lib/python2.7/dist-packages/image/utils.pyt
   do_padding  s"    	$'
c         C` s   | s
 |  S|  } t  d | d d !d  t  d | d d !d  t  d | d d !d  t  d | d d !d  f } t j d | j |  }  |  j \ } } | j \ } } t |  | t  | | d  t  | | d  f  }  |  S(	   Nu   0x%si    i   i   i   i   i   u   RGBA(   R!   R"   RP   R   RV   (   R$   t
   backgroundRS   R   Ra   Rb   Rc   Rd   (    (    s5   /usr/local/lib/python2.7/dist-packages/image/utils.pyt   do_background  s    4c         C` s   | s
 |  Sy t  |  } Wn t k
 r3 d } n X| d d k rb |  j | t j d t }  n |  j | t j d t }  |  S(   Ni    iZ   t   expand(   R   R?   t   rotateR"   t   NEARESTRZ   t   BICUBIC(   R$   t   rotation(    (    s5   /usr/local/lib/python2.7/dist-packages/image/utils.pyt	   do_rotate  s    
u   .5,.5c         C` s  t  |  t j  s! t |   } n t |   } t j |  } | j d k r] | j d  } n  | d k ry | j
 d } n  | d k r | j
 d } n  t | |  } | r t | | | | |  } n t | | | |  } | r t |  } n  t | |  t | | | |  } t | |  } t | |
 |  t | | | | | |	  } t | |  } t | |  } t   } | j   t k r| j d  } n  | j | | d | | j d  | j   } | j   | j   | S(   u{   
    Rescale the given image, optionally cropping it to make sure the result image has the specified width and height.
    u   RGBAi    i   u   RGBt   qualityN(   t
   isinstancet   sixt   string_typesR   R   R"   RW   R=   R>   Rr   R   R   R<   R/   RN   RM   R   R   R   Ry   R   t   uppert   ALPHA_FORMATSt   savet   seekt   getvaluet   close(   RK   R%   R&   R'   R   Rs   Ru   Rt   Rv   Rw   R~   R|   R4   t   formatR   R   R   RB   t   pre_rotationt   post_rotationR3   t	   grayscalet
   input_fileR$   t   tmpt   output_data(    (    s5   /usr/local/lib/python2.7/dist-packages/image/utils.pyt   render  s@    	

t   maxsizei   c         C` s    d t  j |  j d   j   S(   Nu   image_token_%su   utf8(   t   hashlibt   sha1t   encodet	   hexdigest(   t
   parameters(    (    s5   /usr/local/lib/python2.7/dist-packages/image/utils.pyt   image_create_tokenI  s    c         C` sw   |  rg d  } x0 |  j   D]" \ } } | | k r | } Pq q W| d  k rs t |  } | |  | <qs n t |  } | S(   N(   Rr   t   itemsR   (   t   sessionR   t   tokent   kt   v(    (    s5   /usr/local/lib/python2.7/dist-packages/image/utils.pyt   image_tokenizeN  s    c      	   C` s   | rM d d l  m } d | k } | j  d |  d t |  d | d |  n  t j j t |  j |  t j	 |   } t
 j |  S(   Ni    (   t   viewsu   autogen=truet   requestt   pathR   t   autogen(   t   imageR   t   strt   osR   t   joinR   R   R   t	   text_typeR   t   url(   R   R   t   image_fieldt   generatet   image_viewsR   t
   image_path(    (    s5   /usr/local/lib/python2.7/dist-packages/image/utils.pyt	   image_url]  s    +*(    (    (    (1   t
   __future__R    R   R   R   R   R   t   PILR   R"   t	   functoolsR   R   R   R   R   R   t   image.settingsR	   R
   t   image.storageR   R   R   t   IMAGE_CACHE_ROOTt   INTERNAL_CACHE_ROOTR   R   R   R   R/   R<   RM   RN   RV   Rr   Ro   Ry   R   R   R   R   R   RZ   RY   R   R   R   R   (    (    (    s5   /usr/local/lib/python2.7/dist-packages/image/utils.pyt   <module>   sH   							2	@		@W	(+				2	