a
    ֶaN*                     @   s   d dl mZ ddlmZmZ zddlmZ dZW n eyF   dZY n0 ddddZdddZ	d	d
d
dZ
dd ZG dd dejZdd Zdd Zeejee ereeje ejreeje eejd eejd dS )    )BytesIO   )Image	ImageFile)_webpTF)RGBXRGBARGB)r	   r   r	   r   )s   VP8 s   VP8Xs   VP8Lc                 C   sL   | d d dk}| dd dk}| dd t v }|rH|rH|rHtsDdS dS d S )	N   s   RIFF      s   WEBP   zEimage file could not be identified because WEBP support not installedT)_VP8_MODES_BY_IDENTIFIER	SUPPORTED)prefixZis_riff_file_formatZis_webp_fileZis_valid_vp8_mode r   c/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/PIL/WebPImagePlugin.py_accept   s    r   c                       sj   e Zd ZdZdZdZdZdd Zdd Zdd	 Z	dddZ
dd Zdd Z fddZ fddZ  ZS )WebPImageFileZWEBPz
WebP imager   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tilen_framesZis_animatedZWebPAnimDecoder_decoderget_inforawmodeZ	get_chunk_reset)selfdatawidthheightr   r   Z
loop_countZbgcolorZframe_countr"   bg_abg_rbg_gbg_br   r   r   r   _open,   sN    











zWebPImageFile._openc                 C   s   d| j vrd S |   S )Nr   )r#   ZgetexifZ_get_merged_dictr,   r   r   r   _getexif`   s    
zWebPImageFile._getexifc                 C   s   |  |sd S || _d S N)Z_seek_check_WebPImageFile__logical_framer,   framer   r   r   seeke   s    
zWebPImageFile.seekTc                 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+   l   s
    
zWebPImageFile._resetc                 C   sd   | j  }|  jd7  _|d u r:|   | d td|\}}|| j }|| _||8 }|||fS )Nr   r   z(failed to decode next frame in WebP file)r(   Zget_nextr=   r+   r;   EOFErrorr?   )r,   retr-   	timestampdurationr   r   r   	_get_nexts   s    


zWebPImageFile._get_nextc                 C   s8   | j |krd S || j k r |   | j |k r4|   q d S r7   )r=   r+   rD   r9   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 )NrB   rC   r   r   r   )r   r   r>   r8   rE   rD   r#   r    Z_exclusive_fpcloser   r%   r*   r&   superload)r,   r-   rB   rC   	__class__r   r   rH      s    



zWebPImageFile.loadc                    s   t jst  S | jS r7   )r   r   rG   tellr8   r5   rI   r   r   rK      s    
zWebPImageFile.tell)T)__name__
__module____qualname__formatformat_descriptionr>   r8   r4   r6   r;   r+   rD   rE   rH   rK   __classcell__r   r   rI   r   r   %   s   4
r   c           '      C   s  | j  }t|dg }d}| g| D ]}|t|dd7 }q(|dkrVt| || d S d}d|v rl|d }nTd| jv r| jd }t|tr| 	 }|r||d |d d  \}	}
}|	|
|df}| j d| j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pZd}| 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rt|dkstdd |D s
t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vrd!|jv pd"|jv p|jd#kod!|j v }%|%rd$nd%}$||$}#|$d%krd&}$||#d'|$||#jd |#jd |$||| t|ttfr`||| 7 }n||7 }|d7 }qqzW | |  n| |  0 |d |ddd||d ||||}&|&d u rtd(| |& d S ))Nappend_imagesr   r'   r   )r   r   r   r   r      rC   r   minimize_sizeFkminkmaxallow_mixedlosslessqualityP   methodr    r   r   	         r
   c                 s   s   | ]}|d ko|dk V  qdS )r      Nr   ).0vr   r   r   	<genexpr>       z_save_all.<locals>.<genexpr>z<Background color is not an RGBA tuple clamped to (0-255): %sr   r   r   AaPr   r	   r   r   1cannot write file as WebP (encoder returned None))!encoderinfocopylistgetgetattr_saver#   
isinstanceintZ
getpaletter   ExiftobytestuplelenallOSErrorstrr   ZWebPAnimEncoderr%   rK   ranger;   rH   r"   _VALID_WEBP_MODESimZgetpalettemodeconvertaddZassemblewrite)'rz   r    filenameri   rR   totalZimsr   ZpalettergbrC   r   rT   rU   rV   rW   verboserX   rY   r[   r   r   r   r1   r2   r3   r0   encZ	frame_idxrB   Zcur_idxZnfridxr:   r*   alphar-   r   r   r   	_save_all   s    







 




r   c                 C   s   | j dd}| j dd}| j dp*d}| j dd}t|tjrN| }| j dd}| j d	d
}| jtvrd| jv pd| jv p| jdkod| jv }	| 	|	rdnd} t
|  | jd | jd |t|| j||||
}
|
d u rtd||
 d S )NrX   FrY   rZ   r   r\   r   r   r[   r
   re   rf   rg   Ztransparencyr   r	   r   r   rh   )ri   rl   ro   r   rq   rr   r"   _VALID_WEBP_LEGACY_MODESr#   r{   r   Z
WebPEncoder%   floatrv   r}   )rz   r    r~   rX   rY   r   r   r   r[   r   r-   r   r   r   rn   5  s<    

rn   z.webpz
image/webpN)ior   r\   r   r   r   r   ImportErrorry   r   r   r   r   r   rn   Zregister_openrO   Zregister_saver   Zregister_save_allZregister_extensionZregister_mimer   r   r   r   <module>   s2   

  $