a
    h'                     @  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  sF   |  d}| dd dk}| dd tv }|rB|rB|rBts>dS dS dS )	Ns   RIFF      s   WEBP   zEimage file could not be identified because WEBP support not installedTF)
startswith_VP8_MODES_BY_IDENTIFIER	SUPPORTED)r   Zis_riff_file_formatZis_webp_fileZis_valid_vp8_mode r   A/var/www/auris/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 \| _}}}}|| 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)selfZ
loop_countZbgcolorZframe_countmodebg_abg_rbg_gbg_br   r    r!   r   r   r   _open+   s.    






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   _getexifM   s    
zWebPImageFile._getexifint)framer   c                 C  s   |  |sd S || _d S N)Z_seek_check_WebPImageFile__logical_framer-   r7   r   r   r   seekR   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,   Y   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;   EOFErrorr@   )r-   retmsgdata	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 r8   )r>   r,   rG   r:   r   r   r   _seeku   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 )NrE   rF   raw)r   r   r   )r?   r9   rH   rG   r(   r#   Z_exclusive_fpcloser   r   Z_Tilesizer+   Ztilesuperload)r-   rD   rE   rF   	__class__r   r   rM   }   s    



zWebPImageFile.load)posr   c                 C  s   d S r8   r   )r-   rP   r   r   r   	load_seek   s    zWebPImageFile.load_seekc                 C  s   | j S r8   )r9   r4   r   r   r   tell   s    zWebPImageFile.tell)T)__name__
__module____qualname__formatformat_descriptionr?   r9   r3   r5   r;   r,   rG   rH   rM   rQ   rR   __classcell__r   r   rN   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
   )r.   convertZhas_transparency_data)rY   r   r   r   _convert_frame   s    
r[   z	IO[bytes]zstr | bytesr   )rY   r#   filenamer   c           '   
   C  sp  | 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} 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 rbd$}t|||& d S )%Nappend_imagesr   r)   r   )r   r   r   r   r      r   rF   r   minimize_sizeFkminkmaxallow_mixedlosslessqualityP   alpha_qualityd   methodr    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(   
isinstancer6   Z
getpaletter   ExiftobytestuplelenallOSErrorr	   ZWebPAnimEncoderrK   rR   ranger;   r[   addgetimroundZassemblewrite)'rY   r#   r\   rt   r]   totalZimsr   ZpalettergbrF   r   r_   r`   ra   rb   verboserc   rd   rf   rh   r   r    r!   rC   r0   r1   r2   r/   encZ	frame_idxrE   Zcur_idxZnfridxr7   rD   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 )Nrc   Frd   re   rf   rg   r   ri   r    rr   s   Exif     r!   rh   rm   exactr   r   rs   )rt   rw   rz   r   r{   r|   r   r[   r	   Z
WebPEncoder   floatr   r   )rY   r#   r\   rc   rd   rf   r   r    r!   rh   r   rD   rC   r   r   r   ry     s8    
ry   z.webpz
image/webpN)
__future__r   ior   typingr   r   ri   r   r   r	   r   ImportErrorr   r   r   r[   r   ry   Zregister_openrV   Zregister_saveZregister_save_allZregister_extensionZregister_mimer   r   r   r   <module>   s.   
q|"