a
    ç´«j'  ã                   @  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   úR/var/www/html/laksyashrimp/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 ¡ \| _}}}}|| jd< |d? d@ |d? d@ |d? d@ |d@ f\}}}}||||f| jd< || _| jdk| _	|dkr’d	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_countÚ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-   r8   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<   ÚEOFErrorrA   )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 r9   )r?   r,   rH   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 )NrF   rG   Úraw)r   r   r   )r@   r:   rI   rH   r(   r#   Z_exclusive_fpÚcloser   r   Z_TileÚsizer+   ZtileÚsuperÚload)r-   rE   rF   rG   ©Ú	__class__r   r   rN   }   s    



zWebPImageFile.load)Úposr   c                 C  s   d S r9   r   )r-   rQ   r   r   r   Ú	load_seek�   s    zWebPImageFile.load_seekc                 C  s   | j S r9   )r:   r5   r   r   r   Útell’   s    zWebPImageFile.tell)T)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionr@   r:   r4   r6   r<   r,   rH   rI   rN   rR   rS   Ú__classcell__r   r   rO   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)rZ   r   r   r   Ú_convert_frame–   s    
r\   z	IO[bytes]zstr | bytesr   )rZ   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¡}|�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} d}!|  ¡ }"z˜| g| D ]~}t|ddƒ}#t|#ƒD ]b}$| |$¡ t|ƒ}%| |% ¡ t|!ƒ||||¡ t|ttfƒ�rô|!||  7 }!n|!|7 }!| d7 } �q¤�qŒW |  |"¡ n|  |"¡ 0 | d t|!ƒ|||d¡ | |||¡}&|&d u �rbd$}t|ƒ‚| |&¡ d S )%NÚappend_imagesr   r)   r   )r   r   r   r   r   é   r   rG   r   Úminimize_sizeFÚkminÚkmaxÚallow_mixedÚlosslessÚqualityéP   Úalpha_qualityéd   Ú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(   Ú
isinstancer7   Z
getpaletter   ÚExifÚtobytesÚtupleÚlenÚallÚOSErrorr	   ZWebPAnimEncoderrL   rS   Úranger<   r\   ÚaddÚgetimÚroundÚassembleÚwrite)'rZ   r#   r]   ru   r^   ÚtotalZimsr   ÚpaletteÚrÚgÚbrG   r   r`   ra   rb   rc   Úverboserd   re   rg   ri   r   r    r!   rD   r1   r2   r3   r0   ÚencZ	frame_idxrF   Zcur_idxZnfrÚidxr8   rE   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¡rždnd}
t| ƒ} t 	|  
¡ |t|ƒt|ƒ||	|
||¡	}|d u räd}t|ƒ‚| |¡ d S )Nrd   Fre   rf   rg   rh   r   rj   r    rs   s   Exif  é   r!   ri   rn   Úexactr   r   rt   )ru   rx   r{   r   r|   r}   r   r\   r	   Z
WebPEncoder„   Úfloatr�   r‡   )rZ   r#   r]   rd   re   rg   r   r    r!   ri   r’   rE   rD   r   r   r   rz     s8    
÷rz   z.webpz
image/webpN)Ú
__future__r   Úior   Útypingr   r   rj   r   r   r	   r   ÚImportErrorr   r   r   r\   r�   rz   Zregister_openrW   Zregister_saveZregister_save_allZregister_extensionZregister_mimer   r   r   r   Ú<module>   s.   
ýq|"