o
    õ·i»'  ã                   @  s  d dl mZ 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Z
e
r6d dlmZmZ 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é   )ÚImageÚ	ImageFile)Ú_webpTF)ÚIOÚAnyÚ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   Zis_riff_file_formatZis_webp_fileZis_valid_vp8_mode© r   úYC:\Users\psant\Downloads\PAF backend\school\venv\Lib\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 )*ÚWebPImageFileZWEBPz
WebP imager   r   ÚNonec                 C  sÔ   | j d usJ ‚t | j  ¡ ¡| _| j ¡ \| _| jd< }| _| _	|d? d@ |d? d@ |d@ |d? d@ f| jd< | jdk| _
| j	dkrDd	n| j	| _d
dddœ ¡ D ]\}}| j |¡ }ra|| j|< qP| jdd� d S )NÚloopr   éÿ   r   é   Ú
backgroundr   ÚRGBXr
   ZICCPZEXIFzXMP )Úicc_profileÚexifÚxmpF)Úreset)Úfpr   ZWebPAnimDecoderÚreadÚ_decoderÚget_infoÚ_sizeÚinfoÚn_framesÚrawmodeZis_animatedÚ_modeÚitemsZ	get_chunkÚ_reset)ÚselfZbgcolorÚkeyZ
chunk_nameÚvaluer   r   r   Ú_open-   s*   ÿ



üý
ü
€zWebPImageFile._openúdict[int, Any] | Nonec                 C  s   d| j vrd S |  ¡  ¡ S )Nr!   )r)   ZgetexifZ_get_merged_dict©r/   r   r   r   Ú_getexifL   s   
zWebPImageFile._getexifÚframeÚintc                 C  s   |   |¡sd S || _d S ©N)Z_seek_checkÚ_WebPImageFile__logical_frame©r/   r6   r   r   r   ÚseekQ   s   

zWebPImageFile.seekTr#   Úboolc                 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.   X   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&   Zget_nextr>   r.   r;   ÚEOFErrorr@   )r/   Ú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 r8   )r>   r.   rH   r:   r   r   r   Ú_seekt   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 )NrF   rG   Úraw)r   r   r   )r?   r9   rI   rH   r)   r$   Z_exclusive_fpÚcloser   r   Z_TileÚsizer+   ZtileÚsuperÚload)r/   rE   ©Ú	__class__r   r   rO   |   s   


zWebPImageFile.loadÚposc                 C  s   d S r8   r   )r/   rR   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)r   r   )r   r3   )r6   r7   r   r   )T)r#   r<   r   r   )r   rA   )r   rJ   )rR   r7   r   r   )r   r7   )Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionr?   r9   r2   r5   r;   r.   rH   rI   rO   rS   rT   Ú__classcell__r   r   rP   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
   )ÚmodeÚconvertZhas_transparency_data)r[   r   r   r   Ú_convert_frame“   s   
r_   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   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>Ó   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Ú_saver)   Ú
isinstancer7   Z
getpaletter   ÚExifÚtobytesÚtupleÚlenÚallÚOSErrorr   ZWebPAnimEncoderrM   rT   Úranger;   r_   ÚaddÚgetimÚroundZassembleÚwrite)'r[   r$   ra   ry   rc   ÚtotalZimsr   ZpaletteÚrÚgÚbrG   r   re   rf   rg   rh   Úverboseri   rj   rl   rn   r    r!   r"   rD   Zbg_rZbg_gZbg_bZbg_aÚencZ	frame_idxrF   Zcur_idxZnfrÚidxr6   rE   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 )Nri   Frj   rk   rl   rm   r    ro   r!   ó    s   Exif  é   r"   rn   rs   Úexactr   r   rx   )ry   r|   r   r   r€   r�   r   r_   r   Z
WebPEncoderˆ   Úfloatr…   rŠ   )r[   r$   ra   ri   rj   rl   r    r!   r"   rn   r•   rE   rD   r   r   r   r~     s8   
÷r~   z.webpz
image/webpN)r   r   r   r   )r[   r\   r   r\   )r[   r\   r$   r`   ra   rb   r   r   )Ú
__future__r   Úior   ro   r   r   r   r   ÚImportErrorÚTYPE_CHECKINGÚtypingr   r	   r   r   r   r_   r’   r~   Zregister_openrX   Zregister_saveZregister_save_allZregister_extensionZregister_mimer   r   r   r   Ú<module>   s8    ÿý

l

|"ü