a
    ¥Q•hè+  ã                   @   sê   d dl mZ ddlmZmZ zddlmZ dZW n eyF   dZY n0 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ræe eje¡ ejrÊe eje¡ e ejd¡ e 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 v }|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   úL/var/www/sistema_ama/venv/lib/python3.9/site-packages/PIL/WebPImagePlugin.pyÚ_accept   s    ÿr   c                       sr   e Zd ZdZdZdZdZd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 ¡ ¡\}}}| _}}|r2|| 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< |�rp|| 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	   ZICCPZEXIFzXMP Úxmp)Úreset)r   ÚHAVE_WEBPANIMZ
WebPDecodeÚfpÚreadÚ_modeÚinfoÚ_sizer   ÚsizeÚmodeÚtileÚn_framesÚis_animatedZWebPAnimDecoderÚ_decoderZget_infoÚrawmodeZ	get_chunkÚ_reset)ÚselfÚdataÚwidthÚheightr   r   Z
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©r.   r   r   r   Ú_getexif_   s    
zWebPImageFile._getexifc                 C   s   d| j v r|  | j d ¡S i S )z™
        Returns a dictionary containing the XMP tags.
        Requires defusedxml to be installed.

        :returns: XMP tags in a dictionary.
        r   )r$   Ú_getxmpr;   r   r   r   Úgetxmpd   s    zWebPImageFile.getxmpc                 C   s   |   |¡sd S || _d S ©N)Ú_seek_checkÚ_WebPImageFile__logical_frame©r.   Úframer   r   r   Úseekm   s    
zWebPImageFile.seekTc                 C   s$   |r| j  ¡  d| _d| _d| _d S )Nr   éÿÿÿÿ)r+   r   Ú_WebPImageFile__physical_frameÚ_WebPImageFile__loadedÚ_WebPImageFile__timestamp)r.   r   r   r   r   r-   t   s
    
zWebPImageFile._resetc                 C   sh   | j  ¡ }|  jd7  _|d u r>|  ¡  |  d¡ d}t|ƒ‚|\}}|| j }|| _||8 }|||fS )Nr   r   z(failed to decode next frame in WebP file)r+   Úget_nextrF   r-   rD   ÚEOFErrorrH   )r.   ÚretÚmsgr/   Ú	timestampÚdurationr   r   r   Ú	_get_next{   s    


zWebPImageFile._get_nextc                 C   s8   | j |krd S || j k r |  ¡  | j |k r4|  ¡  q d S r?   )rF   r-   rO   rB   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 )NrM   rN   r   r   r   )r   r    rG   rA   rP   rO   r$   r!   Ú_exclusive_fpÚcloser   r&   r,   r(   ÚsuperÚload)r.   r/   rM   rN   ©Ú	__class__r   r   rT   ˜   s    



zWebPImageFile.loadc                    s   t jstƒ  ¡ S | jS r?   )r   r    rS   ÚtellrA   r;   rU   r   r   rW   «   s    
zWebPImageFile.tell)T)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionrG   rA   r8   r<   r>   rD   r-   rO   rP   rT   rW   Ú__classcell__r   r   rU   r   r   %   s   4	
r   c           (      C   sø  | j  ¡ }t| dg ¡ƒ}d}| g| D ]}|t|ddƒ7 }q(|dkrVt| ||ƒ d S d}d|v rl|d }nbd| jv rÎ| jd }t|tƒrÎ|  	¡ }|rÂ||d |d d … \}	}
}|	|
|df}n|||df}| j  d	| j d	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¡�pjd}| 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d|› �}t|ƒ‚|\}}}}|d> |d > B |d!> B |d> B }t | jd | jd |||||||¡	}d}d} |  ¡ }!�z| g| D �] }t|ddƒ}"t|"ƒD ]ä}#| |#¡ | ¡  |}$|j}%|jtv�rd"|jv �pd#|jv �p|jd$k�od"|j ¡ v }&|&�rd%nd&}%| |%¡}$|%d&k�r*d'}%| |$ d(|%¡t| ƒ|$jd |$jd |%|||¡ t|ttfƒ�rx| || 7 } n| |7 } |d7 }�q¦�qŒW |  |!¡ n|  |!¡ 0 | d t| ƒddd||d¡ | |||¡}'|'d u �rêd)}t|ƒ‚|  |'¡ d S )*NÚappend_imagesr   r)   r   )r   r   r   r   r   é   r   rN   r   Úminimize_sizeFÚkminÚkmaxÚallow_mixedÚlosslessÚqualityéP   Úmethodr   Ú r   r   é	   é   é   r
   c                 s   s&   | ]}d |  kodk n  V  qdS )r   é   Nr   )Ú.0Úvr   r   r   Ú	<genexpr>ê   ó    z_save_all.<locals>.<genexpr>z:Background color is not an RGBA tuple clamped to (0-255): r   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ÚOSErrorr   ZWebPAnimEncoderr&   rW   ÚrangerD   rT   r'   Ú_VALID_WEBP_MODESÚimÚgetpalettemodeÚconvertÚaddÚroundZassembleÚwrite)(r†   r!   Úfilenameru   r^   ÚtotalÚimsr   ÚpaletteÚrÚgÚbrN   r   r`   ra   rb   rc   Úverboserd   re   rg   r   r   r   rL   r5   r6   r7   r4   ÚencZ	frame_idxrM   Úcur_idxÚnfrÚidxrC   r,   Úalphar/   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ƒrN| ¡ }| d	¡rd|d
d … }| j  dd¡}| j  dd¡}| j  d¡r�dnd}	| jtvr²|  	| j
r¬dnd¡} t |  ¡ | jd | jd |t|ƒ| j|||	||¡}
|
d u rúd}t|ƒ‚| |
¡ d S )Nrd   Fre   rf   r   rh   r   rp   s   Exif  é   r   rg   r
   Úexactr   r   r   r	   rt   )ru   rx   r{   r   r~   r   Ú
startswithr'   Ú_VALID_WEBP_LEGACY_MODESrˆ   Úhas_transparency_datar   Z
WebPEncoder&   Úfloatrƒ   r‹   )r†   r!   rŒ   rd   re   r   r   r   rg   r›   r/   rL   r   r   r   rz   ?  s<    

õrz   z.webpz
image/webpN)Úior   rh   r   r   r   r   ÚImportErrorr…   r�   r   r   r   r™   rz   Úregister_openr[   Úregister_saver    Úregister_save_allÚregister_extensionÚregister_mimer   r   r   r   Ú<module>   s2   

ý  $