o
    gd'                     @  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  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/rescue_company/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 \}}}}}}||f| _|| jd< |d? d@ |d? d@ |d? d@ |d@ f\}}}	}
||	|
|f| jd< || _| jdk| _	|dkrNd	n|| _
|| _g | _| jd
}| jd}| jd}|rp|| jd< |rw|| jd< |r~|| 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tile	get_chunk_reset)selfwidthheight
loop_countbgcolorframe_countmodebg_abg_rbg_gbg_br&   r'   r(   r   r   r   _open+   s2   







zWebPImageFile._opendict[int, Any] | Nonec                 C  s   d| j vrd S |   S )Nr'   )r0   getexif_get_merged_dictr8   r   r   r   _getexifO   s   
zWebPImageFile._getexifframeintc                 C  s   |  |sd S || _d S N)_seek_check_WebPImageFile__logical_framer8   rI   r   r   r   seekT   s   

zWebPImageFile.seekTr)   boolc                 C  s$   |r| j   d| _d| _d| _d S )Nr   )r-   r)   _WebPImageFile__physical_frame_WebPImageFile__loaded_WebPImageFile__timestamp)r8   r)   r   r   r   r7   [   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_nextrR   r7   rO   EOFErrorrT   )r8   retmsgdata	timestampdurationr   r   r   	_get_nextb   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 rK   )rR   r7   r]   rN   r   r   r   _seekw   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 )Nr[   r\   raw)r   r   r   )rS   rM   r^   r]   r0   r+   _exclusive_fpcloser   r   _Tilesizer4   r5   superload)r8   rZ   r[   r\   	__class__r   r   rf      s   




zWebPImageFile.loadposc                 C  s   d S rK   r   )r8   ri   r   r   r   	load_seek   s   zWebPImageFile.load_seekc                 C  s   | j S rK   )rM   rG   r   r   r   tell   s   zWebPImageFile.tell)r   r   )r   rD   )rI   rJ   r   r   )T)r)   rP   r   r   )r   rU   )r   r_   )ri   rJ   r   r   )r   rJ   )__name__
__module____qualname__formatformat_descriptionrS   rM   rC   rH   rO   r7   r]   r^   rf   rj   rk   __classcell__r   r   rg   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)rr   r   r   r   _convert_frame   s   
rv   r+   	IO[bytes]filenamestr | bytesr   c           '      C  sn  | 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}!|  }"zL| g| D ]?}t|dd}#t|#D ]1}$||$ t|}%||% t|!|||| t|ttfry|!||  7 }!n|!|7 }!| d7 } qQqEW | |" n| |" w |d t|!|||d ||||}&|&d u rd$}t|||& d S )%Nappend_imagesr   r1   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   1cannot write file as WebP (encoder returned None))encoderinfocopylistgetgetattr_saver0   
isinstancerJ   
getpaletter   ExiftobytestuplelenallOSErrorr	   WebPAnimEncoderrd   rk   rangerO   rv   addgetimroundassemblewrite)'rr   r+   rx   r   rz   totalimsr"   palettergbr\   r   r|   r}   r~   r   verboser   r   r   r   r&   r'   r(   rY   r@   rA   rB   r?   enc	frame_idxr[   cur_idxnfridxrI   rZ   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   
startswithrv   r	   
WebPEncoder   floatr   r   )rr   r+   rx   r   r   r   r&   r'   r(   r   r   rZ   rY   r   r   r   r     s8   
r   z.webpz
image/webpN)r   r   r   r   )rr   rs   r   rs   )rr   rs   r+   rw   rx   ry   r   r   )
__future__r   ior   typingr   r   r   r   r   r	   r   ImportErrorr   r   r   rv   r   r   register_openro   register_saveregister_save_allregister_extensionregister_mimer   r   r   r   <module>   s4    

s

}"