3

hN*                 @   s   d dl mZ ddlmZmZ yddlmZ dZW n ek
rH   dZY nX ddddZdddZ	d	d
d
dZ
dd ZG dd dejZdd Zdd Zejejee erejeje ejrejeje ejejd ejejd dS )    )BytesIO   )Image	ImageFile)_webpTF)RGBXRGBARGB)r	   r   r	   r   )s   VP8 s   VP8Xs   VP8Lc             C   sL   | d d dk}| dd dk}| dd t k}|rH|rH|rHtsDdS dS d S )	N   s   RIFF      s   WEBP   zEimage file could not be identified because WEBP support not installedT)_VP8_MODES_BY_IDENTIFIER	SUPPORTED)prefixZis_riff_file_formatZis_webp_fileZis_valid_vp8_mode r   S/var/www/html/enquirykeeper_venv/lib/python3.6/site-packages/PIL/WebPImagePlugin.py_accept   s    r   c                   sj   e Zd ZdZdZdZdZdd Zdd Zdd	 Z	dddZ
dd Zdd Z fddZ fddZ  ZS )WebPImageFileZWEBPz
WebP imager   c             C   s  t js|t j| jj \}}}| _}}|r2|| jd< |r@|| jd< ||f| _t|| _dd| j	 d| jfg| _
d| _d| _d S t j| jj | _| jj \}}}}}}	||f| _|| jd< |d? d	@ |d
? d	@ |d? d	@ |d	@ f\}
}}}||||
f| jd< || _| jdk| _|	dkrdn|	| _|	| _g | _
| jjd}| jjd}| jjd}|r`|| jd< |rp|| jd< |r|| jd< | jdd d S )Nicc_profileexifrawr   r   Floop      r   r   
backgroundr   r	   ZICCPZEXIFzXMP xmp)reset)r   r   )r   HAVE_WEBPANIMZ
WebPDecodefpreadmodeinfo_sizer   sizetilen_framesZis_animatedZWebPAnimDecoder_decoderget_inforawmodeZ	get_chunk_reset)selfdatawidthheightr   r   Z
loop_countZbgcolorZframe_countr!   bg_abg_rbg_gbg_br   r   r   r   _open,   sJ    











zWebPImageFile._openc             C   s   d| j krd S | j j S )Nr   )r"   ZgetexifZ_get_merged_dict)r+   r   r   r   _getexif`   s    
zWebPImageFile._getexifc             C   s   | j |sd S || _d S )N)Z_seek_check_WebPImageFile__logical_frame)r+   framer   r   r   seeke   s    
zWebPImageFile.seekTc             C   s$   |r| j j  d| _d| _d| _d S )Nr   r   )r'   r   _WebPImageFile__physical_frame_WebPImageFile__loaded_WebPImageFile__timestamp)r+   r   r   r   r   r*   l   s
    
zWebPImageFile._resetc             C   sd   | j j }|  jd7  _|d kr:| j  | jd td|\}}|| j }|| _||8 }|||fS )Nr   r   z(failed to decode next frame in WebP file)r'   Zget_nextr9   r*   r7   EOFErrorr;   )r+   retr,   	timestampdurationr   r   r   	_get_nexts   s    


zWebPImageFile._get_nextc             C   s<   | j |krd S || j k r | j  x| j |k r6| j  q"W d S )N)r9   r*   r@   )r+   r6   r   r   r   _seek   s    

zWebPImageFile._seekc                s   t jr| j| jkr| j| j | j \}}}|| jd< || jd< | j| _| jr^| jr^| jj	  t
|| _dd| j d| jfg| _t j S )Nr>   r?   r   r   )r   r   )r   r   r:   r5   rA   r@   r"   r   Z_exclusive_fpcloser   r$   r)   r%   superload)r+   r,   r>   r?   )	__class__r   r   rD      s    



zWebPImageFile.loadc                s   t jst j S | jS )N)r   r   rC   tellr5   )r+   )rE   r   r   rF      s    
zWebPImageFile.tell)T)__name__
__module____qualname__formatformat_descriptionr:   r5   r3   r4   r7   r*   r@   rA   rD   rF   __classcell__r   r   )rE   r   r   %   s   4
r   c       '      C   s  | j j }t|jdg }d}x"| g| D ]}|t|dd7 }q*W |dkrZt| || d S d(}d|krp|d }nTd| jkr| jd }t|tr| j	 }|r||d |d d  \}	}
}|	|
|df}| j jd| jj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p^d}| j jdd}t|t
jr|j }| j jdd}|rd
}|d kr|rdnd}|d kr|rdnd}t|ttf st|dkstdd |D  rtdt| |\}}}}|d> |d> B |d> B |d> B }tj| jd | jd |||||||	}d}d}| j } zx| g| D ] }t|dd}!xt|!D ]}"|j|" |j  |}#|j}$|jtkrd |jkpd!|jkp|jd"kod |jj k}%|%r
d#nd$}$|j|$}#|$d$kr&d%}$|j|#jd&|$||#jd |#jd |$||| t|ttfrp||| 7 }n||7 }|d7 }qW qW W d | j|  X |jd |ddd||d |j|||}&|&d krtd'|j |& d S ))Nappend_imagesr   r&   r   r      r?   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   AaPr   r	   r   r   z1cannot write file as WebP (encoder returned None))r   r   r   r   )!encoderinfocopylistgetgetattr_saver"   
isinstanceintZ
getpaletter   ExiftobytestuplelenallOSErrorstrr   ZWebPAnimEncoderr$   rF   ranger7   rD   r!   _VALID_WEBP_MODESimZgetpalettemodeconvertaddZassemblewrite)'rs   r   filenamerb   rM   totalZimsr   Zpalettergbr?   r   rO   rP   rQ   rR   verboserS   rT   rV   r   r   r   r0   r1   r2   r/   encZ	frame_idxr>   Zcur_idxZnfridxr6   r)   alphar,   r   r   r   	_save_all   s    






 




r   c             C   s   | j jdd}| j jdd}| j jdp*d}| j jdd}t|tjrN|j }| j jdd}| j jd	d
}| jtkrd| jkpd| jkp| jdkod| jk}	| j	|	rdnd} t
j| j | jd | jd |t|| j||||
}
|
d krtd|j|
 d S )NrS   FrT   rU   r   rW   r   r   rV   r
   r_   r`   ra   Ztransparencyr   r	   r   r   z1cannot write file as WebP (encoder returned None))rb   re   rh   r   rj   rk   r!   _VALID_WEBP_LEGACY_MODESr"   rt   r   Z
WebPEncoder$   floatro   rv   )rs   r   rw   rS   rT   r   r   r   rV   r   r,   r   r   r   rg   5  s6    


rg   z.webpz
image/webpN)ior   rW   r   r   r   r   ImportErrorrr   r   r   r   r   r   rg   Zregister_openrJ   Zregister_saver   Zregister_save_allZregister_extensionZregister_mimer   r   r   r   <module>   s0   

  $