o
    6d-                     @   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)prefixZis_riff_file_formatZis_webp_fileZis_valid_vp8_mode r   jC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\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 )WebPImageFileZ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rd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	   ZICCPZEXIFzXMP xmp)reset)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_countbgcolorZ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#   ZgetexifZ_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#   Z_getxmpr6   r   r   r   getxmpd   s   zWebPImageFile.getxmpc                 C   s   |  |sd S || _d S N)Z_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(   Zget_nextr?   r+   r=   EOFErrorrA   )r,   retmsgr-   	timestampdurationr   r   r   	_get_next{   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 r9   )r?   r+   rG   r;   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 )NrE   rF   r   r   r   )r   r   r@   r:   rH   rG   r#   r    Z_exclusive_fpcloser   r%   r*   r&   superload)r,   r-   rE   rF   	__class__r   r   rK      s   




zWebPImageFile.loadc                    s   t jst  S | jS r9   )r   r   rJ   tellr:   r6   rL   r   r   rN      s   
zWebPImageFile.tell)T)__name__
__module____qualname__formatformat_descriptionr@   r:   r5   r7   r8   r=   r+   rG   rH   rK   rN   __classcell__r   r   rL   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 }n1d| jv rg| jd }t|trg| 	 }|ra||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pd}| 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rt|dkst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 ]r}#||# |  |}$|j}%|jtvrd"|jv pvd#|jv pv|jd$kovd"|j v }&|&r|d%nd&}%||%}$|%d&krd'}%||$d(|%t| |$jd |$jd |%||| t|ttfr| || 7 } n| |7 } |d7 }qHq<W | |! n| |! w |d t| ddd||d ||||}'|'d u rd)}t|| |' d S )*Nappend_imagesr   r'   r   )r   r   r   r   r      r   rF   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>   s   & 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intZ
getpaletter   ExiftobytestuplelenallOSErrorr   ZWebPAnimEncoderr%   rN   ranger=   rK   r"   _VALID_WEBP_MODESimZgetpalettemodeconvertaddroundassemblewrite)(r{   r    filenamerk   rU   totalZimsr   palettergbrF   r   rW   rX   rY   rZ   verboser[   r\   r^   r   r   r   rD   r2   r3   r4   r1   encZ	frame_idxrE   Zcur_idxZnfridxr<   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r'| }|d	r2|d
d  }| j dd}| j dd}| j drHdnd}	| jtvrld| jv pbd| jv pb| jdkobd| j	v }
| 
|
ridnd} t|  | jd | jd |t|| j|||	||}|d u rd}t||| d S )Nr[   Fr\   r]   r   r_   r       s   Exif     r   r^   r
   exactr   r   rg   rh   ri   Ztransparencyr   r	   rj   )rk   rn   rq   r   rs   rt   
startswithr"   _VALID_WEBP_LEGACY_MODESr#   r|   r   Z
WebPEncoder%   floatrx   r   )r{   r    r   r[   r\   r   r   r   r^   r   r   r-   rD   r   r   r   rp   ?  sF   


rp   z.webpz
image/webpN)ior   r_   r   r   r   r   ImportErrorrz   r   r   r   r   r   rp   Zregister_openrR   Zregister_saver   Zregister_save_allZregister_extensionZregister_mimer   r   r   r   <module>   s8    
  )