o
    Ñ­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y1   dZY nw dddd	œZddd
œ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e ejee¡ er†e eje¡ e
jrve eje¡ e ejd!¡ e ejd"¡ d#S d#S )&é    )Úannotations)ÚBytesIO)ÚIOÚAnyé   )ÚImageÚ	ImageFile)Ú_webpTF)ÚRGBXÚRGBAÚRGB)r   r   r   r   )s   VP8 s   VP8Xs   VP8LÚprefixÚbytesÚreturnú
bool | strc                 C  sN   | d d… dk}| dd… dk}| dd… t v }|r%|r%|r%ts#	 d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   Úis_riff_file_formatÚis_webp_fileÚis_valid_vp8_mode© r   úP/var/www/html/CropPilot/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„ Zd!dd„Z‡ fdd„Zd$dd„Zd%‡ fdd„Z‡  ZS )&ÚWebPImageFileÚWEBPz
WebP imager   r   ÚNonec                 C  sˆ  t js>t  | j ¡ ¡\}}}| _}}|r|| jd< |r || jd< ||f| _t|ƒ| _dd| j	 d| j
fg| _d| _d| _d S t  | j ¡ ¡| _| j ¡ \}}}}}}	||f| _|| jd< |d	? d
@ |d? d
@ |d? d
@ |d
@ f\}
}}}||||
f| jd< || _| jdk| _|	dkrŒdn|	| _|	| _g | _| j d¡}| j d¡}| j d¡}|r®|| jd< |rµ|| jd< |r¼|| jd< | jdd� d S )NÚicc_profileÚexifÚraw©r   r   r   r   FÚloopé   éÿ   r   r   Ú
backgroundr
   r   ÚICCPÚEXIFzXMP Úxmp)Úreset)r	   ÚHAVE_WEBPANIMÚ
WebPDecodeÚfpÚreadÚ_modeÚinfoÚ_sizer   ÚsizeÚmodeÚtileÚn_framesÚis_animatedÚWebPAnimDecoderÚ_decoderÚget_infoÚrawmodeÚ	get_chunkÚ_reset)ÚselfÚdataÚwidthÚheightr    r!   Ú
loop_countÚbgcolorÚframe_countr4   Úbg_aÚbg_rÚbg_gÚbg_br*   r   r   r   Ú_open/   sN   ÿ








ü


zWebPImageFile._openúdict[str, Any] | Nonec                 C  s   d| j vrd S |  ¡  ¡ S )Nr!   )r1   ÚgetexifÚ_get_merged_dict©r>   r   r   r   Ú_getexifc   s   
zWebPImageFile._getexifÚframeÚintc                 C  s   |   |¡sd S || _d S ©N)Ú_seek_checkÚ_WebPImageFile__logical_frame©r>   rO   r   r   r   Úseekh   s   

zWebPImageFile.seekTr+   Úboolc                 C  s$   |r| j  ¡  d| _d| _d| _d S )Nr   éÿÿÿÿ)r9   r+   Ú_WebPImageFile__physical_frameÚ_WebPImageFile__loadedÚ_WebPImageFile__timestamp)r>   r+   r   r   r   r=   o   s
   

zWebPImageFile._resetc                 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)r9   Úget_nextrX   r=   rU   ÚEOFErrorrZ   )r>   ÚretÚmsgr?   Ú	timestampÚdurationr   r   r   Ú	_get_nextv   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 rQ   )rX   r=   ra   rT   r   r   r   Ú_seek‹   s   


ÿzWebPImageFile._seekc                   sŠ   t jr@| j| jkr@|  | j¡ |  ¡ \}}}|| jd< || jd< | j| _| jr/| jr/| j 	¡  t
|ƒ| _dd| j d| jfg| _tƒ  ¡ S )Nr_   r`   r"   r#   r   )r	   r,   rY   rS   rb   ra   r1   r.   Ú_exclusive_fpÚcloser   r3   r;   r5   ÚsuperÚload)r>   r?   r_   r`   ©Ú	__class__r   r   rf   “   s   




zWebPImageFile.loadÚposc                 C  s   d S rQ   r   )r>   ri   r   r   r   Ú	load_seek¦   s   zWebPImageFile.load_seekc                   s   t jstƒ  ¡ S | jS rQ   )r	   r,   re   ÚtellrS   rM   rg   r   r   rk   ©   s   
zWebPImageFile.tell)r   r   )r   rJ   )rO   rP   r   r   )T)r+   rV   r   r   )ri   rP   r   r   )r   rP   )Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionrY   rS   rI   rN   rU   r=   ra   rb   rf   rj   rk   Ú__classcell__r   r   rg   r   r   )   s    

4


r   ÚimúImage.Imager.   ú	IO[bytes]Úfilenameústr | bytesr   c           )      C  sø  | 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 | jd |||||||¡	}d} d}!|  ¡ }"zŽ| g| D ]�}t|ddƒ}#t|#ƒD ]s}$| |$¡ | ¡  |}%|j}&|jtv�rŒd$|jv �pd%|jv �p|jd&k�od$|j ¡ v }'|'�r…d'nd(}&| |&¡}%|&d(k�r“d)}&| |% d*|&¡t|!ƒ|%jd |%jd |&||||¡	 t|ttfƒ�r»|!||  7 }!n|!|7 }!| d7 } �qQ�qEW |  |"¡ n|  |"¡ w | d t|!ƒddd|||d¡	 | |||¡}(|(d u �rõd+}t|ƒ‚|  |(¡ d S ),NÚappend_imagesr   r6   r   )r   r   r   r   r'   é   r&   r`   r$   Úminimize_sizeFÚkminÚkmaxÚallow_mixedÚlosslessÚqualityéP   Úalpha_qualityéd   Úmethodr    Ú r!   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   ÚAÚaÚPr   r   r
   r"   ú1cannot write file as WebP (encoder returned None))!ÚencoderinfoÚcopyÚlistÚgetÚgetattrÚ_saver1   Ú
isinstancerP   Ú
getpaletter   ÚExifÚtobytesÚtupleÚlenÚallÚOSErrorr	   ÚWebPAnimEncoderr3   rk   ÚrangerU   rf   r4   Ú_VALID_WEBP_MODESrr   ÚgetpalettemodeÚconvertÚaddÚroundÚassembleÚwrite))rr   r.   ru   r�   rw   ÚtotalÚimsr'   ÚpaletteÚrÚgÚbr`   r$   ry   rz   r{   r|   Úverboser}   r~   r€   r‚   r    r!   r*   r^   rF   rG   rH   rE   ÚencÚ	frame_idxr_   Úcur_idxÚnfrÚidxrO   r;   Úalphar?   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}
| jtvr`|  	| j
r]dnd¡} t |  ¡ | jd | jd |t|ƒt|ƒ| j||	|
||¡}|d u r‡d}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—   r˜   Ú
startswithr4   Ú_VALID_WEBP_LEGACY_MODESr¡   Úhas_transparency_datar	   Ú
WebPEncoder3   Úfloatrœ   r¥   )rr   r.   ru   r}   r~   r€   r    r!   r*   r‚   r¶   r?   r^   r   r   r   r”   ?  s@   

ôr”   z.webpz
image/webpN)r   r   r   r   )rr   rs   r.   rt   ru   rv   r   r   )Ú
__future__r   Úior   Útypingr   r   rƒ   r   r   r	   r   ÚImportErrorrŸ   r¸   r   r   r   r³   r”   Úregister_openro   Úregister_saver,   Úregister_save_allÚregister_extensionÚregister_mimer   r   r   r   Ú<module>   s<    ÿ
ý
 
 
&û