U
    M»{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k
rd   dZY nX dddd	œZddd
œZddddœZdddœdd„ZG dd„ de	j	ƒZdddddœdd„Zdddddœdd„Ze ejee¡ e�r(e eje¡ e
j�re eje¡ e ejd¡ e ejd¡ d S )!é    )Úannotations)ÚBytesIO)ÚIOÚAnyé   )ÚImageÚ	ImageFile)Ú_webpTF)ÚRGBXÚRGBAÚRGB)r   r   r   r   )s   VP8 s   VP8Xs   VP8LÚbytesz
bool | str)ÚprefixÚreturnc                 C  sL   | d d… dk}| dd… dk}| dd… t k}|rH|rH|rHtsDd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   Zis_riff_file_formatZis_webp_fileZis_valid_vp8_mode© r   úR/var/www/html/bwave/python/venv/lib/python3.8/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d„Zddœd	d
„Zdddœdd„Z	ddddœdd„Z
dd„ Zdddœdd„Z‡ fdd„Zdddœdd„Zddœ‡ fdd„Z‡  ZS ) ÚWebPImageFileZWEBPz
WebP imager   ÚNone)r   c                 C  s�  t js|t  | j ¡ ¡\}}}| _}}|r2|| 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< |�rp|| 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   ZICCPZEXIFzXMP Úxmp)Úreset)r	   ÚHAVE_WEBPANIMZ
WebPDecodeÚfpÚreadÚ_modeÚinfoÚ_sizer   ÚsizeÚmodeÚtileÚn_framesZis_animatedZWebPAnimDecoderÚ_decoderÚget_infoÚrawmodeZ	get_chunkÚ_reset)ÚselfÚdataÚwidthÚheightr   r   Z
loop_countÚbgcolorZframe_countr,   Úbg_aÚbg_rÚbg_gÚbg_br#   r   r   r   Ú_open/   sN    ÿ








ü


zWebPImageFile._openzdict[str, Any] | Nonec                 C  s   d| j krd S |  ¡  ¡ S )Nr   )r)   ZgetexifZ_get_merged_dict©r3   r   r   r   Ú_getexifc   s    
zWebPImageFile._getexifÚint)Úframer   c                 C  s   |   |¡sd S || _d S ©N)Z_seek_checkÚ_WebPImageFile__logical_frame©r3   r@   r   r   r   Úseekh   s    
zWebPImageFile.seekTÚbool)r$   r   c                 C  s$   |r| j  ¡  d| _d| _d| _d S )Nr   éÿÿÿÿ)r/   r$   Ú_WebPImageFile__physical_frameÚ_WebPImageFile__loadedÚ_WebPImageFile__timestamp)r3   r$   r   r   r   r2   o   s
    
zWebPImageFile._resetc                 C  sh   | j  ¡ }|  jd7  _|d kr>|  ¡  |  d¡ d}t|ƒ‚|\}}|| j }|| _||8 }|||fS )Nr   r   z(failed to decode next frame in WebP file)r/   Zget_nextrG   r2   rD   ÚEOFErrorrI   )r3   ÚretÚmsgr4   Ú	timestampÚdurationr   r   r   Ú	_get_nextv   s    


zWebPImageFile._get_nextc                 C  s8   | j |krd S || j k r |  ¡  | j |k r4|  ¡  q d S rA   )rG   r2   rO   rC   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 )NrM   rN   r   r   r   )r	   r%   rH   rB   rP   rO   r)   r&   Z_exclusive_fpÚcloser   r+   r1   r-   ÚsuperÚload)r3   r4   rM   rN   ©Ú	__class__r   r   rS   “   s    



zWebPImageFile.load)Úposr   c                 C  s   d S rA   r   )r3   rV   r   r   r   Ú	load_seek¦   s    zWebPImageFile.load_seekc                   s   t jstƒ  ¡ S | jS rA   )r	   r%   rR   ÚtellrB   r=   rT   r   r   rX   ©   s    
zWebPImageFile.tell)T)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionrH   rB   r<   r>   rD   r2   rO   rP   rS   rW   rX   Ú__classcell__r   r   rT   r   r   )   s   4r   zImage.Imagez	IO[bytes]zstr | bytesr   )Úimr&   Úfilenamer   c           )      C  s   | j  ¡ }t| dg ¡ƒ}d}| g| D ]}|t|ddƒ7 }q(|dkrVt| ||ƒ d S d}d|krl|d }nbd| jkrÎ| jd }t|tƒrÎ|  	¡ }|rÂ||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¡�pxd}| j  dd¡}t|t
jƒ�rž| ¡ }| j  dd¡}|�r¶d}|d k�rÎ|�rÊdnd}|d k�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 ]æ}$| |$¡ | ¡  |}%|j}&|jtk�r*d$|jk�pd%|jk�p|jd&k�od$|j ¡ k}'|'�rd'nd(}&| |&¡}%|&d(k�r8d)}&| |% d*|&¡t|!ƒ|%jd |%jd |&||||¡	 t|ttfƒ�rˆ|!||  7 }!n|!|7 }!| d7 } �q´�qšW 5 |  |"¡ X | d t|!ƒddd|||d¡	 | |||¡}(|(d k�ròd+}t|ƒ‚|  |(¡ d S ),NÚappend_imagesr   r.   r   )r   r   r   r   r"   é   r!   rN   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Ú_saver)   Ú
isinstancer?   Z
getpaletter   ÚExifÚtobytesÚtupleÚlenÚallÚOSErrorr	   ZWebPAnimEncoderr+   rX   rD   ÚrangerS   r,   Ú_VALID_WEBP_MODESr_   ZgetpalettemodeÚconvertÚaddÚroundÚassembleÚwrite))r_   r&   r`   ry   ra   ÚtotalZimsr"   ÚpaletteÚrÚgÚbrN   r   rc   rd   re   rf   Úverboserg   rh   rj   rl   r   r   r#   rL   r9   r:   r;   r8   ÚencZ	frame_idxrM   Zcur_idxZnfrÚidxr@   r1   Úalphar4   r   r   r   Ú	_save_all°   sÒ    






ÿ
þý
 ÷
ÿý


÷
r–   c                 C  s  | j  dd¡}| j  dd¡}| j  dd¡}| j  d¡p8d}| j  d	d
¡}t|tjƒr\| ¡ }| d¡rr|dd … }| j  dd¡}| j  dd¡}	| j  d¡rždnd}
| jtkrÀ|  	| j
rºdnd¡} t |  ¡ | jd | jd |t|ƒt|ƒ| j||	|
||¡}|d k�rd}t|ƒ‚| |¡ d S )Nrg   Frh   ri   rj   rk   r   rm   r   ó    s   Exif  é   r#   rl   r   Úexactr   r   r   r   rx   )ry   r|   r   r   r€   r�   Ú
startswithr,   Ú_VALID_WEBP_LEGACY_MODESrˆ   Zhas_transparency_datar	   Z
WebPEncoder+   Úfloatr…   rŒ   )r_   r&   r`   rg   rh   rj   r   r   r#   rl   r™   r4   rL   r   r   r   r~   ?  s@    

ô
r~   z.webpz
image/webpN)Ú
__future__r   Úior   Útypingr   r   rm   r   r   r	   r   ÚImportErrorr‡   r›   r   r   r   r–   r~   Zregister_openr\   Zregister_saver%   Zregister_save_allZregister_extensionZregister_mimer   r   r   r   Ú<module>   s6   

ý  &