o
    6d                     @   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	   iC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\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r*d	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>   s    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aZ
hash_valuer	   r	   r   _add_to_previous_pixels)   s   $z"QoiDecoder._add_to_previous_pixelsc                    sJ  i _ d _ddd dD  t }tj}t|j	j
j	j | k rjdd }|dkrBjdtd	 }n|d	krMjd
}n|d? }|dkra|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 }nX|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 }qddd |D }| |dkr
|d d }||7 }t|j	j
j	j | k s+t| dS )N    c                 s       | ]}t |V  qd S Nr   r   r	   r	   r   r   3       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 )rA   N)r0   )r   r   diffZ
diff_greenr   r	   r   r   Q   s
    
c                 s   r9   r:   r   r   r	   r	   r   r   ]   r;   )r   )r1   r0   r7   join	bytearrayr   Zgetmodebandsr   lenstateZxsizeZysizefdr   r   getr   	enumerateZ
set_as_rawbytes)r   bufferdataZbandsbyter2   opZop_indexZsecond_byteZdiff_redZ	diff_blueZ
run_lengthr	   rH   r   decode0   sb   

,zQoiDecoder.decodeN)r&   r'   r(   Z	_pulls_fdr7   rV   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