o
    f-                     @  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re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   L/home/ubuntu/webapp/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rd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pd}| 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 | jd |||||||	}d} d}!|  }"z| g| D ]}t|dd}#t|#D ]s}$||$ |  |}%|j}&|jtvrd$|jv pd%|jv p|jd&kod$|j v }'|'rd'nd(}&||&}%|&d(krd)}&||%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 rd+}t|| |( d S ),Nappend_imagesr   r6   r   )r   r   r   r   r'      r&   r`   r$   minimize_sizeFkminkmaxallow_mixedlosslessqualityP   alpha_qualityd   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 rd}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<    

 
 
&