a
    ¥Q•h3  ã                   @   sŠ   d dl Z ddlmZmZ ddlmZ ddlmZ dd„ ZG dd	„ d	ejƒZ	G d
d„ dej
ƒZe e	je	e¡ e de¡ e e	jd¡ dS )é    Né   )ÚImageÚ	ImageFile)Úi32be©Úo8c                 C   s   | d d… dkS )Né   s   qoif© )Úprefixr	   r	   úK/var/www/sistema_ama/venv/lib/python3.9/site-packages/PIL/QoiImagePlugin.pyÚ_accept   s    r   c                   @   s   e Zd ZdZdZdd„ ZdS )ÚQoiImageFileZQOIzQuite OK Imagec                    sŠ   t ˆ j d¡ƒsd}t|ƒ‚t‡ fdd„tdƒD ƒƒˆ _ˆ j d¡d }|dkrTd	nd
ˆ _ˆ j dt	j
¡ ddˆ j ˆ j ¡ d fgˆ _d S )Nr   znot a QOI filec                 3   s   | ]}t ˆ j d ¡ƒV  qdS )r   N)Úi32ÚfpÚread©Ú.0Úi©Úselfr	   r   Ú	<genexpr>   ó    z%QoiImageFile._open.<locals>.<genexpr>é   r   r   é   ÚRGBÚRGBAÚqoi)r   r   )r   r   r   ÚSyntaxErrorÚtupleÚrangeÚ_sizeÚ_modeÚseekÚosÚSEEK_CURÚtellÚtile)r   ÚmsgÚchannelsr	   r   r   Ú_open   s    zQoiImageFile._openN)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionr)   r	   r	   r	   r   r      s   r   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )Ú
QoiDecoderTc                 C   sD   || _ |\}}}}|d |d  |d  |d  d }|| j|< d S )Nr   é   é   é   é@   )Ú_previous_pixelÚ_previously_seen_pixels)r   ÚvalueÚrÚgÚbÚaZ
hash_valuer	   r	   r   Ú_add_to_previous_pixels)   s    $z"QoiDecoder._add_to_previous_pixelsc                    sD  i ˆ_ d ˆ_ˆ d dd„ dD ƒ¡¡ tƒ }t ˆj¡}t|ƒˆj	j
ˆj	j | k �r2ˆj d¡d }|dkrŒˆj d¡ˆjdd …  }�n||d	kr¤ˆj d
¡}�nd|d? }|dkrÎ|d@ }ˆj  |d¡}�n&|dk�r>ˆjd |d@ d
?  d d ˆjd |d@ d?  d d ˆjd |d@  d d f}|ˆjd f7 }n¶|dk�r´ˆj d¡d }|d@ d ‰ |d@ d
? d }	|d@ d }
t‡ ‡fdd„t|	d|
fƒD ƒƒ}|ˆjd f7 }n@|dk�rô|d@ d }ˆj}|dk�ræ|d d… }||| 7 }q8d dd„ |D ƒ¡}ˆ |¡ |dk�r(|d d… }||7 }q8ˆ t|ƒ¡ dS )Nr   c                 s   s   | ]}t |ƒV  qd S ©Nr   r   r	   r	   r   r   3   r   z$QoiDecoder.decode.<locals>.<genexpr>)r   r   r   éÿ   r   r   éþ   r   r=   r   é   é?   )r   r   r   r   é0   r   é   é   é    éð   é   é   c                 3   s(   | ] \}}ˆj | ˆ  | d  V  qdS )rB   N)r4   )r   r   Údiff©Z
diff_greenr   r	   r   r   Q   s   ÿc                 s   s   | ]}t |ƒV  qd S r<   r   r   r	   r	   r   r   ]   r   )éÿÿÿÿr   )r5   r4   r;   ÚjoinÚ	bytearrayr   ÚgetmodebandsÚmodeÚlenÚstateÚxsizeÚysizeÚfdr   Úgetr   Ú	enumerateÚ
set_as_rawÚbytes)r   ÚbufferÚdataÚbandsÚbyter6   ÚopÚop_indexZsecond_byteZdiff_redZ	diff_blueZ
run_lengthr	   rI   r   Údecode0   s`    
ÿÿû
þ




zQoiDecoder.decodeN)r*   r+   r,   Ú	_pulls_fdr;   r^   r	   r	   r	   r   r/   &   s   r/   r   z.qoi)r#   Ú r   r   Ú_binaryr   r   r   r   r   Ú	PyDecoderr/   Úregister_openr-   Úregister_decoderÚregister_extensionr	   r	   r	   r   Ú<module>	   s   A