o
    Z#ûaN*  ã                   @   sî   d dl mZ ddlmZmZ z
ddlmZ dZW n ey#   dZY nw 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 ejee¡ erue eje¡ ejree eje¡ e ejd¡ e ejd¡ dS dS )é    )ÚBytesIOé   )ÚImageÚ	ImageFile)Ú_webpTF)ÚRGBXÚRGBAÚRGB)r	   r   r	   r   )s   VP8 s   VP8Xs   VP8Lc                 C   sV   | d d… dk}| dd… dk}| dd… t v }|r%|r'|r)ts#	 dS dS d 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)ÚprefixÚis_riff_file_formatÚis_webp_fileÚis_valid_vp8_mode© r   ú5/usr/lib/python3/dist-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 )ÚWebPImageFileÚWEBPz
WebP imager   c                 C   sˆ  t js>t  | j ¡ ¡\}}}| _}}|r|| jd< |r || jd< ||f| _t|ƒ| _dd| j	 d| jfg| _
d| _d| _d S t  | 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 d¡}| j d¡}| j d¡}|r®|| jd< |rµ|| jd< |r¼|| jd< | jdd� d S )NÚicc_profileÚexifÚraw©r   r   r   r   FÚloopé   éÿ   r   r   Ú
backgroundr   r	   ÚICCPÚEXIFzXMP Úxmp)Úreset)r   ÚHAVE_WEBPANIMÚ
WebPDecodeÚfpÚreadÚmodeÚinfoÚ_sizer   ÚsizeÚtileÚn_framesÚis_animatedÚWebPAnimDecoderÚ_decoderÚget_infoÚrawmodeÚ	get_chunkÚ_reset)ÚselfÚdataÚwidthÚheightr   r   Ú
loop_countÚbgcolorÚframe_countr)   Úbg_aÚbg_rÚbg_gÚbg_br#   r   r   r   Ú_open,   sN   ÿ








ü


zWebPImageFile._openc                 C   s   d| j vrd S |  ¡  ¡ S )Nr   )r*   ÚgetexifÚ_get_merged_dict©r6   r   r   r   Ú_getexif`   s   
zWebPImageFile._getexifc                 C   s   |   |¡sd S || _d S ©N)Ú_seek_checkÚ_WebPImageFile__logical_frame©r6   Úframer   r   r   Úseeke   s   

zWebPImageFile.seekTc                 C   s$   |r| j  ¡  d| _d| _d| _d S )Nr   éÿÿÿÿ)r1   r$   Ú_WebPImageFile__physical_frameÚ_WebPImageFile__loadedÚ_WebPImageFile__timestamp)r6   r$   r   r   r   r5   l   s
   

zWebPImageFile._resetc                 C   sd   | j  ¡ }|  jd7  _|d u r|  ¡  |  d¡ tdƒ‚|\}}|| j }|| _||8 }|||fS )Nr   r   z(failed to decode next frame in WebP file)r1   Úget_nextrM   r5   rK   ÚEOFErrorrO   )r6   Úretr7   Ú	timestampÚdurationr   r   r   Ú	_get_nexts   s   



zWebPImageFile._get_nextc                 C   sD   | j |krd S || j k r|  ¡  | j |k r |  ¡  | j |k sd S d S rF   )rM   r5   rU   rI   r   r   r   Ú_seek‡   s   


ÿzWebPImageFile._seekc                    sŠ   t jr@| j| jkr@|  | j¡ |  ¡ \}}}|| jd< || jd< | j| _| jr/| jr/| j 	¡  t
|ƒ| _dd| j d| jfg| _tƒ  ¡ S )NrS   rT   r   r   r   )r   r%   rN   rH   rV   rU   r*   r'   Ú_exclusive_fpÚcloser   r,   r3   r-   ÚsuperÚload)r6   r7   rS   rT   ©Ú	__class__r   r   rZ   �   s   




zWebPImageFile.loadc                    s   t jstƒ  ¡ S | jS rF   )r   r%   rY   ÚtellrH   rD   r[   r   r   r]   ¢   s   
zWebPImageFile.tell)T)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionrN   rH   rA   rE   rK   r5   rU   rV   rZ   r]   Ú__classcell__r   r   r[   r   r   %   s    4
r   c           '      C   sÂ  | j  ¡ }t| dg ¡ƒ}d}| g| D ]
}|t|ddƒ7 }q|dkr+t| ||ƒ d S d}d|v r6|d }n*d| jv r`| jd }t|tƒr`|  	¡ }|r`||d |d d … \}	}
}|	|
|df}| j  d| j d¡¡}| j  d	d¡}| j  d
d¡}| j  dd ¡}| j  dd ¡}| j  dd¡}d}| j  dd¡}| j  dd¡}| j  dd¡}| j  d¡p¬d}| j  dd¡}t|t
jƒr¾| ¡ }| j  dd¡}|rÉd}|d u rÓ|rÑdnd}|d u rÝ|rÛdnd}t|ttfƒrót|ƒdksótdd„ |D ƒƒsûtdt|ƒ ƒ‚|\}}}}|d> |d> B |d > B |d> B }t | jd | jd |||||||¡	}d}d}|  ¡ } z‹| g| D ]~}t|ddƒ}!t|!ƒD ]p}"| |"¡ | ¡  |}#|j}$|jtv�ryd!|jv �pld"|jv �pl|jd#k�old!|j ¡ v }%|%�rrd$nd%}$| |$¡}#|$d%k�r€d&}$| |# d'|$¡||#jd |#jd |$|||¡ t|ttfƒ�r¥||| 7 }n||7 }|d7 }�q>�q2W |  | ¡ n|  | ¡ w | d |ddd||d¡ | |||¡}&|&d u �rÚtd(ƒ‚|  |&¡ d S ))NÚappend_imagesr   r.   r   )r   r   r   r   r    é   rT   r   Úminimize_sizeFÚkminÚkmaxÚallow_mixedÚlosslessÚqualityéP   Ú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   ú1cannot write file as WebP (encoder returned None))!ÚencoderinfoÚcopyÚlistÚgetÚgetattrÚ_saver*   Ú
isinstanceÚintÚ
getpaletter   ÚExifÚtobytesÚtupleÚlenÚallÚOSErrorÚstrr   ÚWebPAnimEncoderr,   r]   ÚrangerK   rZ   r)   Ú_VALID_WEBP_MODESÚimÚgetpalettemodeÚconvertÚaddÚassembleÚwrite)'r�   r'   Úfilenamerz   rd   ÚtotalÚimsr    ÚpaletteÚrÚgÚbrT   r   rf   rg   rh   ri   Úverboserj   rk   rm   r   r   r#   r>   r?   r@   r=   ÚencÚ	frame_idxrS   Úcur_idxÚnfrÚidxrJ   r3   Úalphar7   r   r   r   Ú	_save_all©   sÒ   




ÿÿÿÿ ÷
ÿý


øÛü,
r¡   c                 C   sþ   | j  dd¡}| j  dd¡}| j  d¡pd}| j  dd¡}t|tjƒr'| ¡ }| j  dd¡}| j  d	d
¡}| jtvrWd| jv pMd| jv pM| jdkoMd| jv }	|  	|	rTdnd¡} t
 |  ¡ | jd | jd |t|ƒ| j||||¡
}
|
d u rxtdƒ‚| |
¡ d S )Nrj   Frk   rl   r   rn   r   r#   rm   r
   rv   rw   rx   Útransparencyr   r	   r   r   ry   )rz   r}   r€   r   rƒ   r„   r)   Ú_VALID_WEBP_LEGACY_MODESr*   r�   r   Ú
WebPEncoder,   Úfloatrˆ   r’   )r�   r'   r“   rj   rk   r   r   r#   rm   r    r7   r   r   r   r   5  s<   

ÿýör   z.webpz
image/webpN)Úior   rn   r   r   r   r   ÚImportErrorrŒ   r£   r   r   r   r¡   r   Úregister_openra   Úregister_saver%   Úregister_save_allÚregister_extensionÚregister_mimer   r   r   r   Ú<module>   s8    ÿ
ý  $û