a
    !f!                     @   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	   S/var/www/html/python-backend/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      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a
hash_valuer	   r	   r   _add_to_previous_pixels)   s    $z"QoiDecoder._add_to_previous_pixelsc                    s>  i _ d _ddd dD  t }tj}t|j	j
j	j | k r,jdd }|dkrjdtd	 }n||d	krjd
}nd|d? }|dkr|d@ }j |d}n&|dkr8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 )r@   N)r1   )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   )r2   r1   r9   join	bytearrayr   Zgetmodebandsr    lenstateZxsizeZysizefdr   r   getr   	enumerateZ
set_as_rawbytes)r   bufferdataZbandsbyter3   opZop_indexZsecond_byteZdiff_redZ	diff_blueZ
run_lengthr	   rG   r   decode0   s`    






zQoiDecoder.decodeN)r'   r(   r)   Z	_pulls_fdr9   rU   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