a
    Qh+                     @   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reeje ejre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}|rd}|d u r|rdnd}|d u r|rd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qW | |! n| |! 0 |d t| ddd||d ||||}'|'d u rd)}t|| |' d S )*Nappend_imagesr   r)   r   )r   r   r   r   r      r   rN   r   minimize_sizeFkminkmaxallow_mixedlosslessqualityP   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rdnd}	| jtvr| 	| j
rdnd} t|  | jd | jd |t|| j|||	||}
|
d u rd}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   

  $