
hR\%                 @   s  d  d l  m Z m Z m Z d d l m Z i d d 6d d 6Z i d d 6d d 6Z i d d 6d d	 6d d
 6Z d d   Z	 Gd d   d e j  Z
 d d   Z d d   Z e j e
 j e
 e	  e j e
 j e  e j r e j e
 j e  n  e j e
 j d  e j e
 j d  d S)   )Image	ImageFile_webp    )BytesIOTRGBXRGBARGBs   VP8 s   VP8Xs   VP8Lc             C   sR   |  d  d  d k } |  d d  d k } |  d d  t  k } | oQ | oQ | S)N   s   RIFF      s   WEBP   )_VP8_MODES_BY_IDENTIFIER)prefixZis_riff_file_formatZis_webp_fileZis_valid_vp8_mode r   H/var/www/dbchiro/venv/lib/python3.4/site-packages/PIL/WebPImagePlugin.py_accept   s    r   c                   s   e  Z d  Z d Z d Z d d   Z d d   Z e d d    Z e d	 d
    Z	   f d d   Z
 d d d  Z d d   Z d d   Z   f d d   Z   f d d   Z   S)WebPImageFileWEBPz
WebP imagec             C   s  t  j s t  j |  j j    \ } } } |  _ } } | rL | |  j d <n  | rb | |  j d <n  | | f |  _ t |  |  _ d d |  j d |  j f g |  _	 d |  _
 d  St  j |  j j    |  _ |  j j   \ } } } } } }	 | | f |  _ | |  j d <| d ?d @| d	 ?d @| d
 ?d @| d @f \ }
 } } } | | | |
 f |  j d <| |  _
 |	 |  _ g  |  _	 |  j j d  } |  j j d  } |  j j d  } | r| |  j d <n  | r| |  j d <n  | r| |  j d <n  |  j d d  |  j d  d  S)Nicc_profileexifrawr   r   loop      r   r   
backgroundZICCPZEXIFzXMP xmpresetF)r   r   )r   HAVE_WEBPANIMZ
WebPDecodefpreadmodeinfosizer   tile	_n_framesZWebPAnimDecoder_decoderget_infoZ	get_chunk_resetseek)selfdatawidthheightr   r   Z
loop_countZbgcolorZframe_countr!   bg_abg_rbg_gbg_br   r   r   r   _open#   sD    	-"	!			zWebPImageFile._openc             C   s   d d l  m } | |   S)Nr   )_getexif)ZJpegImagePluginr3   )r*   r3   r   r   r   r3   T   s    zWebPImageFile._getexifc             C   s   |  j  S)N)r%   )r*   r   r   r   n_framesX   s    zWebPImageFile.n_framesc             C   s   |  j  d k S)Nr   )r%   )r*   r   r   r   is_animated\   s    zWebPImageFile.is_animatedc                se   t  j s t t |   j |  S| |  j k r= t d   n  | d k  rX t d   n  | |  _ d  S)Nz(attempted to seek beyond end of sequencer   z!negative frame index is not valid)r   r   superr   r)   r%   EOFError_WebPImageFile__logical_frame)r*   frame)	__class__r   r   r)   `   s    	zWebPImageFile.seekTc             C   s5   | r |  j  j   n  d |  _ d |  _ d |  _ d  S)Nr   r   )r&   r   _WebPImageFile__physical_frame_WebPImageFile__loaded_WebPImageFile__timestamp)r*   r   r   r   r   r(   m   s
    		zWebPImageFile._resetc             C   s   |  j  j   } |  j d 7_ | d  k rP |  j   |  j d  t d   n  | \ } } | |  j } | |  _ | | 8} | | | f S)Nr   r   z(failed to decode next frame in WebP file)r&   Zget_nextr<   r(   r)   r7   r>   )r*   retr+   	timestampdurationr   r   r   	_get_nextt   s    
	
zWebPImageFile._get_nextc             C   sS   |  j  | k r d  S| |  j  k  r/ |  j   n  x |  j  | k  rN |  j   q2 Wd  S)N)r<   r(   rB   )r*   r9   r   r   r   _seek   s    zWebPImageFile._seekc                s   t  j r |  j |  j k r |  j |  j  |  j   \ } } } | |  j d <| |  j d <|  j |  _ t |  |  _ d d |  j	 d |  j
 f g |  _ q n  t t |   j   S)Nr@   rA   r   r   )r   r   )r   r   r=   r8   rC   rB   r"   r   r   r#   r!   r$   r6   r   load)r*   r+   r@   rA   )r:   r   r   rD      s    	(zWebPImageFile.loadc                s#   t  j s t t |   j   S|  j S)N)r   r   r6   r   tellr8   )r*   )r:   r   r   rE      s    	zWebPImageFile.tell)__name__
__module____qualname__formatZformat_descriptionr2   r3   propertyr4   r5   r)   r(   rB   rC   rD   rE   r   r   )r:   r   r      s   1r   c       "      C   sq  |  j  j   } t | j d g    } d } x7 |  g | D]( } | t | d  sY d n | j 7} q; W| d k r t |  | |  d  S| j d d%  } |  j  j d d  } |  j  j d d  }	 |  j  j d d	  }
 |  j  j d
 d   } |  j  j d d   } |  j  j d d	  } d	 } |  j  j d d	  } |  j  j d d  } |  j  j d d  } |  j  j d d  } |  j  j d d  } |  j  j d d  } | rd	 } n  | d  k r| rd n d } n  | d  k r| rd n d } n  t | t t f  s.t	 |  d k s.t
 d d   | D  rGt d t |    n  | \ } } } } | d >| d >B| d >B| d >B} t j |  j d |  j d | |	 |
 | | | | 	 } d } d } |  j   } z5x.|  g | D]} t | d  sd } n	 | j } x t |  D] } | j |  | j   | } | j t k r| j d  k o`d! | j j   k }  | j |  rud" n d#  } n  | j | j   | | j d | j d | j | | |  t | t t f  r| | | 7} n
 | | 7} | d 7} qWqWWd  |  j |  X| j d  | d d d | | d  | j | | |  }! |! d  k r`t d$   n  | j |!  d  S)&Nappend_imagesr   r4   r   r   rA   r   minimize_sizeFkminkmaxallow_mixedlosslessqualityP   methodr    r   r   	            r
   c             s   s'   |  ] } | d  k o | d k  Vq d S)r      Nr   ).0vr   r   r   	<genexpr>   s    z_save_all.<locals>.<genexpr>z<Background color is not an RGBA tuple clamped to (0-255): %sr   r   r   PAr   r   z1cannot write file as WebP (encoder returned None))r   r   r   r   )encoderinfocopylistgethasattrr4   _save
isinstancetuplelenallIOErrorstrr   ZWebPAnimEncoderr#   rE   ranger)   rD   r!   _VALID_WEBP_MODESimgetpalettemodeconvertaddtobytesZassemblewrite)"rm   r   filenamer_   rK   totalZimsr   rA   r   rL   rM   rN   rO   verboserP   rQ   rS   r   r   r   r/   r0   r1   r.   encZ	frame_idxr@   Zcur_idxZnfridxr9   alphar+   r   r   r   	_save_all   s    &	("			
$	
ry   c       
   
   C   s*  |  j  j d d  } |  j  j d d  } |  j  j d d  } |  j  j d d  } |  j  j d d  } |  j t k r |  j d	 k o d
 |  j j   k } |  j | r d n d  }  n  t j |  j	   |  j
 d |  j
 d | t |  |  j | | | 	 }	 |	 d  k rt d   n  | j |	  d  S)NrP   FrQ   rR   r   rT   r   r   r]   r^   r   r	   r   r   z1cannot write file as WebP (encoder returned None))r_   rb   r!   _VALID_WEBP_LEGACY_MODESrm   rn   ro   r   Z
WebPEncoderq   r#   floatri   rr   )
rm   r   rs   rP   rQ   r   r   r   rx   r+   r   r   r   rd     s*    $	

		rd   z.webpz
image/webpN)rT   r   r   r   ior   rl   rz   r   r   r   ry   rd   Zregister_openrI   Zregister_saver   Zregister_save_allZregister_extensionZregister_mimer   r   r   r   <module>   s*   


s	