a
    AgM'                     @  s  d dl mZ d dlmZ d dlmZmZ ddlmZm	Z	 zddlm
Z
 dZW n eyb   dZY n0 d	d
d
dZdddddZG dd de	j	ZdddddZdddddddZdddddddZeejee ereeje eeje eejd eejd  d!S )"    )annotations)BytesIO)IOAny   )Image	ImageFile)_webpTFRGBRGBA)s   VP8 s   VP8Xs   VP8Lbytesz
bool | str)prefixreturnc                 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 installedTF)_VP8_MODES_BY_IDENTIFIER	SUPPORTED)r   Zis_riff_file_formatZis_webp_fileZis_valid_vp8_mode r   R/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/PIL/WebPImagePlugin.py_accept   s    r   c                      s   e Zd ZdZdZdZdZddddZddd	d
ZdddddZ	d!dddddZ
ddddZdddddZdd fddZdddddZdddd Z  ZS )"WebPImageFileZWEBPz
WebP imager   None)r   c                 C  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|| _
|| _| jd
}| jd}| jd}|r|| jd< |r|| jd< |r|| jd< | jdd d S )Nloop      r   r   
backgroundr   RGBXr
   ZICCPZEXIFzXMP icc_profileexifxmpF)reset)r	   ZWebPAnimDecoderfpread_decoderget_info_sizeinfon_framesZis_animated_moderawmodeZ	get_chunk_reset)selfwidthheightZ
loop_countZbgcolorZframe_countmodebg_abg_rbg_gbg_br   r    r!   r   r   r   _open+   s0    







zWebPImageFile._openzdict[int, Any] | Nonec                 C  s   d| j vrd S |   S )Nr    )r(   ZgetexifZ_get_merged_dictr-   r   r   r   _getexifN   s    
zWebPImageFile._getexifint)framer   c                 C  s   |  |sd S || _d S N)Z_seek_check_WebPImageFile__logical_framer-   r9   r   r   r   seekS   s    
zWebPImageFile.seekTbool)r"   r   c                 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,   Z   s
    
zWebPImageFile._resetztuple[bytes, int, int]c                 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=   EOFErrorrB   )r-   retmsgdata	timestampdurationr   r   r   	_get_nexta   s    


zWebPImageFile._get_nextc                 C  s8   | j |krd S || j k r |   | j |k r4|   q d S r:   )r@   r,   rI   r<   r   r   r   _seekv   s    


zWebPImageFile._seekzImage.core.PixelAccess | Nonec                   s   | j | jkr~| | j |  \}}}|| jd< || jd< | j| _ | jrX| jrX| j  t|| _t	
dd| j d| jg| _t  S )NrG   rH   raw)r   r   r   )rA   r;   rJ   rI   r(   r#   Z_exclusive_fpcloser   r   Z_Tilesizer+   Ztilesuperload)r-   rF   rG   rH   	__class__r   r   rO   ~   s    



zWebPImageFile.load)posr   c                 C  s   d S r:   r   )r-   rR   r   r   r   	load_seek   s    zWebPImageFile.load_seekc                 C  s   | j S r:   )r;   r6   r   r   r   tell   s    zWebPImageFile.tell)T)__name__
__module____qualname__formatformat_descriptionrA   r;   r5   r7   r=   r,   rI   rJ   rO   rS   rT   __classcell__r   r   rP   r   r   %   s   #r   zImage.Image)imr   c                 C  s"   | j dvr| | jrdnd} | S )N)r   r   r
   r   r
   )r0   convertZhas_transparency_data)r[   r   r   r   _convert_frame   s    
r]   z	IO[bytes]zstr | bytesr   )r[   r#   filenamer   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d}| j dpxd}| 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 ]b}$||$ t|}%||% t|!|||| t|ttfr |!||  7 }!n|!|7 }!| d7 } qqW | |" n| |" 0 |d t|!|||d ||||}&|&d u rnd$}t|||& d S )%Nappend_imagesr   r)   r   )r   r   r   r   r      r   rH   r   minimize_sizeFkminkmaxallow_mixedlosslessqualityP   alpha_qualityd   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   1cannot write file as WebP (encoder returned None))encoderinfocopylistgetgetattr_saver(   
isinstancer8   Z
getpaletter   ExiftobytestuplelenallOSErrorr	   ZWebPAnimEncoderrM   rT   ranger=   r]   addgetimroundZassemblewrite)'r[   r#   r^   ru   r_   totalZimsr   ZpalettergbrH   r   ra   rb   rc   rd   verbosere   rf   rh   rj   r   r    r!   rE   r2   r3   r4   r1   encZ	frame_idxrG   Zcur_idxZnfridxr9   rF   r   r   r   	_save_all   s    








 


r   c                 C  s   | j dd}| j dd}| j dd}| j dp8d}| j d	d
}t|tjr\| }|drr|dd  }| j dd}| j dd}	| j drdnd}
t| } t	| 
 |t|t|||	|
||	}|d u rd}t||| d S )Nre   Frf   rg   rh   ri   r   rk   r    rs   s   Exif     r!   rj   r   exactr   r   rt   )ru   rx   r{   r   r|   r}   
startswithr]   r	   Z
WebPEncoder   floatr   r   )r[   r#   r^   re   rf   rh   r   r    r!   rj   r   rF   rE   r   r   r   rz     s8    
rz   z.webpz
image/webpN)
__future__r   ior   typingr   r   rk   r   r   r	   r   ImportErrorr   r   r   r]   r   rz   Zregister_openrX   Zregister_saveZregister_save_allZregister_extensionZregister_mimer   r   r   r   <module>   s.   
r}"