a
    7Xh3                     @   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	   W/var/www/viveiro_mudafortebrasil/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      ZRGBZRGBAqoi)r   r   )r   r   r   SyntaxErrortuplerange_size_modeseekosSEEK_CURtellZtile)r   msgZ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   r9   r      ?   )r   r   r   r   0   r                      c                 3   s(   | ] \}}j |   | d  V  qdS )r>   N)r0   )r   r   diffZ
diff_greenr   r	   r   r   Q   s   c                 s   s   | ]}t |V  qd S r8   r   r   r	   r	   r   r   ]   r   )r   )r1   r0   r7   join	bytearrayr   ZgetmodebandsmodelenstateZxsizeZysizefdr   getr   	enumerateZ
set_as_rawbytes)r   bufferdataZbandsbyter2   opZop_indexZsecond_byteZdiff_redZ	diff_blueZ
run_lengthr	   rE   r   decode0   s`    






zQoiDecoder.decodeN)r&   r'   r(   Z	_pulls_fdr7   rT   r	   r	   r	   r   r+   &   s   r+   r   z.qoi)r!    r   r   _binaryr   r   r   r   r   Z	PyDecoderr+   Zregister_openr)   Zregister_decoderZregister_extensionr	   r	   r	   r   <module>	   s   A