o
    üÞ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y1   dZY nw d	d
d
dœZd$dd„ZG dd„ de	j	ƒZd%dd„Zd&dd„Z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 d#S )'é    )Úannotations)ÚBytesIO)ÚIOÚAnyé   )ÚImageÚ	ImageFile)Ú_webpTFÚRGBÚRGBA)s   VP8 s   VP8Xs   VP8LÚprefixÚbytesÚreturnú
bool | strc                 C  sH   |   d¡}| dd… dk}| dd… tv }|r"|r"|r"t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   Úis_riff_file_formatÚis_webp_fileÚis_valid_vp8_mode© r   úS/var/www/html/premium_crap/venv/lib/python3.10/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„Zd"d	d
„Zd#dd„Z	d$d%dd„Z
d&dd„Zd#dd„Zd'‡ fdd„Zd(dd„Zd)dd „Z‡  ZS )*ÚWebPImageFileÚWEBPz
WebP imager   r   ÚNonec                 C  sü   t  | j ¡ ¡| _| j ¡ \| _}}}}|| jd< |d? d@ |d? d@ |d? d@ |d@ f\}}}}||||f| jd< || _| jdk| _	|dkrId	n|| _
|| _| j d
¡}	| j d¡}
| j d¡}|	rh|	| jd< |
ro|
| jd< |rv|| jd< | jdd� d S )NÚloopé   éÿ   r   r   Ú
backgroundr   ÚRGBXr
   ÚICCPÚEXIFzXMP Úicc_profileÚexifÚxmpF)Úreset)r	   ÚWebPAnimDecoderÚfpÚreadÚ_decoderÚget_infoÚ_sizeÚinfoÚn_framesÚis_animatedÚ_modeÚrawmodeÚ	get_chunkÚ_reset)ÚselfÚ
loop_countÚbgcolorÚframe_countÚmodeÚbg_aÚbg_rÚbg_gÚbg_br&   r'   r(   r   r   r   Ú_open+   s.   



ü


zWebPImageFile._openúdict[int, Any] | Nonec                 C  s   d| j vrd S |  ¡  ¡ S )Nr'   )r0   ÚgetexifÚ_get_merged_dict©r7   r   r   r   Ú_getexifM   s   
zWebPImageFile._getexifÚframeÚintc                 C  s   |   |¡sd S || _d S ©N)Ú_seek_checkÚ_WebPImageFile__logical_frame©r7   rF   r   r   r   ÚseekR   s   

zWebPImageFile.seekTr)   Úboolc                 C  s$   |r| j  ¡  d| _d| _d| _d S )Nr   éÿÿÿÿ)r-   r)   Ú_WebPImageFile__physical_frameÚ_WebPImageFile__loadedÚ_WebPImageFile__timestamp)r7   r)   r   r   r   r6   Y   s
   

zWebPImageFile._resetú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-   Úget_nextrO   r6   rL   ÚEOFErrorrQ   )r7   ÚretÚmsgÚdataÚ	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 rH   )rO   r6   rZ   rK   r   r   r   Ú_seeku   s   


ÿzWebPImageFile._seekúImage.core.PixelAccess | Nonec                   sˆ   | j | jkr?|  | j¡ |  ¡ \}}}|| jd< || jd< | j| _ | jr,| jr,| j ¡  t|ƒ| _t	 
dd| j d| j¡g| _tƒ  ¡ S )NrX   rY   Úraw)r   r   r   )rP   rJ   r[   rZ   r0   r+   Ú_exclusive_fpÚcloser   r   Ú_TileÚsizer4   ÚtileÚsuperÚload)r7   rW   rX   rY   ©Ú	__class__r   r   rd   }   s   




zWebPImageFile.loadÚposc                 C  s   d S rH   r   )r7   rg   r   r   r   Ú	load_seek�   s   zWebPImageFile.load_seekc                 C  s   | j S rH   )rJ   rD   r   r   r   Útell’   s   zWebPImageFile.tell)r   r   )r   rA   )rF   rG   r   r   )T)r)   rM   r   r   )r   rR   )r   r\   )rg   rG   r   r   )r   rG   )Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionrP   rJ   r@   rE   rL   r6   rZ   r[   rd   rh   ri   Ú__classcell__r   r   re   r   r   %   s    

"



r   ÚimúImage.Imagec                 C  s"   | j dvr|  | jrdnd¡} | S )N)r#   r   r
   r   r
   )r;   ÚconvertÚhas_transparency_data)rp   r   r   r   Ú_convert_frame–   s   
rt   r+   ú	IO[bytes]Úfilenameústr | bytesr   c           '   
   C  sb  | 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d¡}| j  d¡p»d}| 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}!|  ¡ }"zL| g| D ]?}t|ddƒ}#t|#ƒD ]1}$| |$¡ t|ƒ}%| |% ¡ t|!ƒ||||¡ t|ttfƒ�rs|!||  7 }!n|!|7 }!| d7 } �qK�q?W |  |"¡ n|  |"¡ w | d t|!ƒ|||d¡ | |||¡}&|&d u �rªd$}t|ƒ‚| |&¡ d S )%NÚappend_imagesr   r1   r   )r   r   r   r   r"   é   r!   rY   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>Ö   s   €& 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Ú_saver0   Ú
isinstancerG   Ú
getpaletter   ÚExifÚtobytesÚtupleÚlenÚallÚOSErrorr	   ÚWebPAnimEncoderra   ri   ÚrangerL   rt   ÚaddÚgetimÚroundÚassembleÚwrite)'rp   r+   rv   rŽ   rx   ÚtotalÚimsr"   ÚpaletteÚrÚgÚbrY   r   rz   r{   r|   r}   Úverboser~   r   r�   rƒ   r&   r'   r(   rV   r=   r>   r?   r<   ÚencÚ	frame_idxrX   Úcur_idxÚnfrÚidxrF   rW   r   r   r   Ú	_save_all�   s´   




ÿÿ
 ø
ú
ìü
r¯   c                 C  sò   | j  dd¡}| j  dd¡}| j  dd¡}| j  d¡pd}| j  d	d
¡}t|tjƒr.| ¡ }| d¡r9|dd … }| j  dd¡}| j  dd¡}	| j  d¡rOdnd}
t| ƒ} t 	|  
¡ |t|ƒt|ƒ||	|
||¡	}|d u rrd}t|ƒ‚| |¡ d S )Nr~   Fr   r€   r�   r‚   r&   r„   r'   ó    s   Exif  é   r(   rƒ   rˆ   Úexactr   r   r�   )rŽ   r‘   r”   r   r–   r—   r   rt   r	   Ú
WebPEncoderŸ   Úfloatr›   r¢   )rp   r+   rv   r~   r   r�   r&   r'   r(   rƒ   r²   rW   rV   r   r   r   r“     s8   
÷r“   z.webpz
image/webpN)r   r   r   r   )rp   rq   r   rq   )rp   rq   r+   ru   rv   rw   r   r   )Ú
__future__r   Úior   Útypingr   r   r„   r   r   r	   r   ÚImportErrorr   r   r   rt   r¯   r“   Úregister_openrm   Úregister_saveÚregister_save_allÚregister_extensionÚregister_mimer   r   r   r   Ú<module>   s4    ÿý

q

|"ü