a
    ç´«j|!  ã                   @  sö   d dl mZ d dlZd dlmZ ddlmZmZ ddlm	Z
 ddlmZ ddlmZ d	d
dœdd„ZG dd„ dejƒZG dd„ dejƒZdddddœdd„ZG dd„ dejƒZe ejee¡ e de¡ e ejd¡ e eje¡ e de¡ dS )é    )ÚannotationsN)ÚIOé   )ÚImageÚ	ImageFile)Úi32be)Úo8)Úo32beÚbytesÚbool)ÚprefixÚreturnc                 C  s
   |   d¡S )Nó   qoif)Ú
startswith)r   © r   úQ/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/PIL/QoiImagePlugin.pyÚ_accept   s    r   c                   @  s"   e Zd ZdZdZddœdd„ZdS )ÚQoiImageFileZQOIzQuite OK ImageÚNone©r   c                 C  s’   t | j d¡ƒsd}t|ƒ‚t| j d¡ƒt| j d¡ƒf| _| j d¡d }|dkrZdnd| _| j dtj	¡ t
 dd	| j | j ¡ ¡g| _d S )
Né   znot a QOI filer   r   é   ÚRGBÚRGBAÚqoi©r   r   )r   ÚfpÚreadÚSyntaxErrorÚi32Ú_sizeÚ_modeÚseekÚosÚSEEK_CURr   Ú_TileÚtellZtile)ÚselfÚmsgÚchannelsr   r   r   Ú_open   s    "zQoiImageFile._openN)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionr*   r   r   r   r   r      s   r   c                   @  sJ   e Zd ZU dZdZded< i Zded< ddd	œd
d„Zdddœdd„ZdS )Ú
QoiDecoderTNzbytes | bytearray | NoneÚ_previous_pixelzdict[int, bytes | bytearray]Ú_previously_seen_pixelszbytes | bytearrayr   )Úvaluer   c                 C  sD   || _ |\}}}}|d |d  |d  |d  d }|| j|< d S )Nr   é   é   é   é@   )r1   r2   )r'   r3   ÚrÚgÚbÚaÚ
hash_valuer   r   r   Ú_add_to_previous_pixels.   s    $z"QoiDecoder._add_to_previous_pixelsz$bytes | Image.SupportsArrayInterfaceztuple[int, int])Úbufferr   c                   sP  ˆj d usJ ‚i ˆ_tdƒˆ_tƒ }t ˆj¡}ˆjjˆjj	 | }t
|ƒ|k �rBˆj  d¡d }|dkr’ˆjr’tˆj  d¡ƒˆjdd …  }�n†|dkrªˆj  d¡}�nn|d? }|dkrØ|d	@ }ˆj |td
ƒ¡}�n@|dk�rLˆj�rLtˆjd |d@ d?  d d ˆjd |d@ d?  d d ˆjd |d@  d d ˆjd fƒ}nÌ|dk�rÐˆj�rÐˆj  d¡d }	|d	@ d ‰ |	d@ d? d }
|	d@ d }tt‡ ‡fdd„t|
d|fƒD ƒƒƒ}|ˆjdd … 7 }nH|dk�rˆj�r|d	@ d }ˆj}|dk�r
|d d… }||| 7 }qDˆ |¡ |dk�r8|d d… }||7 }qDˆ |¡ dS )N©r   r   r   éÿ   r   r   éþ   r   r@   r   é   é?   ©r   r   r   r   é0   é   é   é   é    éð   é   é   c                 3  s(   | ] \}}ˆj | ˆ  | d  V  qdS )rG   N)r1   )Ú.0ÚiÚdiff©Z
diff_greenr'   r   r   Ú	<genexpr>^   s   ÿz$QoiDecoder.decode.<locals>.<genexpr>)éÿÿÿÿr   )Úfdr2   Ú	bytearrayr1   r   ÚgetmodebandsÚmodeÚstateZxsizeZysizeÚlenr   ÚgetÚtupleÚ	enumerater=   Z
set_as_raw)r'   r>   ÚdataÚbandsZdest_lengthÚbyter3   ÚopZop_indexZsecond_byteZdiff_redZ	diff_blueZ
run_lengthr   rP   r   Údecode5   sl    
"ÿÿÿúÿ
þÿ




zQoiDecoder.decode)	r+   r,   r-   Z	_pulls_fdr1   Ú__annotations__r2   r=   r`   r   r   r   r   r0   )   s
   
r0   zImage.Imagez	IO[bytes]zstr | bytesr   )Úimr   Úfilenamer   c              	   C  s´   | j dkrd}n| j dkr d}nd}t|ƒ‚| j d¡dkr@dnd	}| d
¡ | t| jd ƒ¡ | t| jd	 ƒ¡ | t|ƒ¡ | t|ƒ¡ t 	| |t 
dd| j ¡g¡ d S )Nr   r   r   r   zUnsupported QOI image modeÚ
colorspaceZsRGBr   r   r   r   r   )rV   Ú
ValueErrorZencoderinforY   ÚwriteÚo32Úsizer   r   Ú_saver%   )rb   r   rc   r)   r(   rd   r   r   r   ri   t   s    


ri   c                   @  s^   e Zd ZU dZdZded< i Zded< dZdd	œd
d„Zddddœdd„Z	dddœdd„Z
dS )Ú
QoiEncoderTNz tuple[int, int, int, int] | Noner1   z$dict[int, tuple[int, int, int, int]]r2   r   r
   r   c                 C  s   t d| jd B ƒ}d| _|S )NéÀ   r   r   )r   Ú_run)r'   r\   r   r   r   Ú
_write_runŽ   s    zQoiEncoder._write_runÚint)ÚleftÚrightr   c                 C  s    || d@ }|dkr|d8 }|S )Nr@   é€   rG   r   )r'   ro   rp   Úresultr   r   r   Ú_delta“   s    zQoiEncoder._deltaztuple[int, int, bytes])Úbufsizer   c                 C  sô  | j d usJ ‚ddi| _d| _tƒ }| j j\}}t | j¡}t|ƒD �]~}t|ƒD �]n}| j  	||f¡}|dkr~g |¢d‘R }|| jkr°|  j
d7  _
| j
dkr¬||  ¡ 7 }�n| j
rÂ||  ¡ 7 }|\}	}
}}|	d |
d  |d	  |d
  d }| j |¡|k�r|t|ƒ7 }�n¨| j�r¼|| j|< | j\}}}}||k�r¤|  |	|¡}|  |
|¡}|  ||¡}d|  k�rzdk �rän nfd|  k�r–dk �rän nJd|  k�r²dk �rän n.|td|d d> B |d d> B |d B ƒ7 }n¾|  ||¡}|  ||¡}d|  k�rdk �r‚n njd|  k�r0dk �r‚n nNd|  k�rLdk �r‚n n2|td|d B ƒ7 }|t|d d> |d B ƒ7 }n |tdƒ7 }|t|d d… ƒ7 }n|tdƒ7 }|t|ƒ7 }|| _qRqD| j
�rÚ||  ¡ 7 }|tdƒ7 }t|ƒd|fS )Nr   rD   r?   r   r@   r   é>   r4   r5   r6   r7   éþÿÿÿrF   r   iøÿÿÿrK   iàÿÿÿrI   rq   rA   )r   r   r   r   r   r   r   r   )rb   r2   r1   rT   rh   r   rU   rV   ÚrangeZgetpixelrl   rm   rY   r   rs   r
   rX   )r'   rt   r\   ÚwÚhr]   ÚyÚxZpixelr8   r9   r:   r;   r<   Zprev_rZprev_gZprev_bZprev_aZdelta_rZdelta_gZdelta_bZdelta_grZdelta_gbr   r   r   Úencode™   s˜    


$

ÿ
ÿþ
þý
ý
ÿ
þýÿÿ
ÿþ
þý
ý
ÿ
zQoiEncoder.encode)r+   r,   r-   Z
_pushes_fdr1   ra   r2   rl   rm   rs   r|   r   r   r   r   rj   ˆ   s   
rj   r   z.qoi)Ú
__future__r   r#   Útypingr   Ú r   r   Ú_binaryr   r   r   r	   rg   r   r   Z	PyDecoderr0   ri   Z	PyEncoderrj   Zregister_openr.   Zregister_decoderZregister_extensionZregister_saveZregister_encoderr   r   r   r   Ú<module>   s    K]