a
    ç´«j�M  ã                   @  sž  d dl mZ d dlZd dlmZmZ ddlmZmZm	Z	 ddl
mZ ddl
mZ ddl
mZ dd	l
mZ dd
l
mZ dddddddœZdZdddœdd„Zdddœdd„ZG dd„ dejƒZG dd„ dejƒZG dd„ deƒZd d!d"d#d$d%œZd&d'd(d)d*œd+d,„Zd5d&d'd(dd)d.œd/d0„Ze ej ee¡ e !ej e¡ e "ej d1¡ e #ej d2¡ e $d3e¡ e ej ee¡ e !ej e¡ e "ej d4¡ e #ej d2¡ dS )6é    )ÚannotationsN)ÚIOÚAnyé   )ÚImageÚ	ImageFileÚImagePalette)Úi16le)Úi32le©Úo8)Úo16le)Úo32le)ÚPzP;1)r   zP;4)r   r   )ÚRGBúBGR;15)r   ÚBGR)r   ÚBGRX)r   é   é   é   é   é    FÚbytesÚbool)ÚprefixÚreturnc                 C  s
   |   d¡S )Nó   BM)Ú
startswith©r   © r    úQ/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/PIL/BmpImagePlugin.pyÚ_accept6   s    r"   c                 C  s   t | ƒdv S )N)é   é(   é4   é8   é@   él   é|   )Úi32r   r    r    r!   Ú_dib_accept:   s    r+   c                   @  sh   e Zd ZdZdZdZdddddd	d
œZe ¡ D ]\ZZ	e	e
ƒ e< q.dddddœdd„Zddœdd„ZdS )ÚBmpImageFilez0Image plugin for the Windows Bitmap format (BMP)úWindows BitmapZBMPr   r   é   é   r   é   )ÚRAWÚRLE8ÚRLE4Ú	BITFIELDSZJPEGZPNGÚintÚNone)ÚheaderÚoffsetr   c                 C  sT  | j j| j j }}|r||ƒ t|dƒƒddœ}t|d tƒsBJ ‚t | j |d d ¡}|d dkr¶t|dƒ|d< t|dƒ|d	< t|dƒ|d
< t|dƒ|d< | j	d |d< d|d< �n<|d dv �rÚ|d dk|d< |d ràdnd|d< t|dƒ|d< |d �s
t|dƒndt|dƒ |d	< t|dƒ|d
< t|dƒ|d< t|dƒ|d< t|dƒ|d< t|dƒt|dƒf|d< t|dƒ|d < d|d< t|d t
ƒ�s–J ‚t
d!d"„ |d D ƒƒ| jd#< |d | j	d$ k�ròg d%¢}t|ƒd&k�r*t|ƒd'k�rö| d(¡ nd|d(< t|ƒD ] \}}	t|d)|d  ƒ||	< �qn$d|d(< |D ]}	t|dƒƒ||	< �q6t|d* tƒ�sbJ ‚t|d+ tƒ�svJ ‚t|d, tƒ�sŠJ ‚t|d( tƒ�sžJ ‚|d* |d+ |d, f|d-< |d* |d+ |d, |d( f|d.< nd/|d › d0�}
t|
ƒ‚t|d tƒ�sJ ‚t|d	 tƒ�sJ ‚|d |d	 f| _t|d tƒ�s@J ‚| d d¡�rV|d  n
d|d > |d < t|d  tƒ�szJ ‚|d1|d  k�rª|d dk�rª|d|d   7 }t |d d2¡\| _}| j�sàd3|d › d0�}
t|
ƒ‚d4}|d | j	d$ k�rg d5¢d6gd7d8gd9œ}d:d;d<d=d>d?d@d?dAdBdCdDœ}|d |v �rø|d dEk�rœ|d. ||d  v �rœt|d. t
ƒ�spJ ‚||d |d. f }dF|v �r’d>n| j| _nZ|d dGv �rê|d- ||d  v �rêt|d- t
ƒ�sÔJ ‚||d |d- f }ndH}
t|
ƒ‚ndH}
t|
ƒ‚nz|d | j	d k�rD|d dEk�r€|dIk�s8t�r€dJ\}| _n<|d | j	dK | j	dL fv �rhdM}ndN|d › d0�}
t|
ƒ‚| jdOk�r d|d    k �r¨dPk�sÄn dQ|d  › d0�}
t|
ƒ‚nÜt|d tƒ�sØJ ‚|d }|||d   ƒ}dR}|d  dk�rdSntt|d  ƒƒ}t|ƒD ]8\}}||| || d … }|t|ƒd k�rdT}�q|�r~|d  dk�rpdUndV| _| j}n"dO| _t |dk�r–d:ndA|¡| _|d | jd< |g}|dMk�rØ| |d | j	dL k¡ n6t|d tƒ�sìJ ‚| |d |d  dW d? dX@ ¡ | |d ¡ t |dd|d |d	 f|�pB| j  ¡ t
|ƒ¡g| _dYS )Zz Read relevant info about the BMPr   éÿÿÿÿ)Úheader_sizeÚ	directionr:   r#   r   Úwidthr.   ÚheightZplanesé   Úbitsr1   Úcompressionr/   Zpalette_padding)r$   r%   r&   r'   r(   r)   é   éÿ   Zy_flipr   r;   l        r   é
   r   Ú	data_sizeé   r   Zpixels_per_meteré   Úcolorsc                 s  s   | ]}|d  V  qdS )çóÒo_¯C@Nr    ©Ú.0Úxr    r    r!   Ú	<genexpr>„   ó    z'BmpImageFile._bitmap.<locals>.<genexpr>Údpir4   )Úr_maskÚg_maskÚb_maské0   r%   Za_maské$   rO   rP   rQ   Zrgb_maskZ	rgba_maskzUnsupported BMP header type (ú)é   )Ú rV   zUnsupported BMP pixel depth (Úraw)©é  ÿ é ÿ  rB   r   ©ì      ~ rY   rZ   r   ©r\   rZ   rB   r   ©r\   rY   rZ   rB   ©rB   rZ   rY   r\   ©rY   rZ   rB   r\   ©r\   rZ   rB   rY   ©r   r   r   r   ©rY   rZ   rB   ©i ø  ià  é   ©i |  ià  re   )r   r   r   r   ZXBGRZBGXRZABGRÚRGBAÚBGRAZBGARr   zBGR;16r   ))r   rX   )r   r[   )r   r]   )r   r^   )r   r_   )r   r`   )r   ra   )r   rb   )r   rc   )r   rd   )r   rf   r   ÚA)r   r   z Unsupported BMP bitfields layouté   )rh   rg   r2   r3   Úbmp_rlezUnsupported BMP compression (r   i   zUnsupported BMP Palette size (T©r   rB   FÚ1ÚLre   éüÿÿÿN)ÚfpÚreadÚseekr*   Ú
isinstancer5   r   Ú
_safe_readÚi16ÚCOMPRESSIONSÚtupleÚinfoÚlenÚappendÚ	enumerateÚOSErrorÚ_sizeÚgetÚBIT2MODEÚ_modeÚmodeÚUSE_RAW_ALPHAÚlistÚranger   r   rW   ÚpaletteÚ_TileÚtellZtile)Úselfr7   r8   rq   rr   Ú	file_infoZheader_dataÚmasksÚidxÚmaskÚmsgZraw_modeZdecoder_nameZ	SUPPORTEDZ
MASK_MODESÚpaddingr…   Z	grayscaleÚindicesÚindÚvalÚrgbÚargsr    r    r!   Ú_bitmapM   sD   
þ	ÿýþ
ýü

ÿ
ý 
ôõ
ÿþ
ÿþ

ÿÿþ

ÿýÿ
"üÿzBmpImageFile._bitmap©r   c                 C  s:   | j  d¡}t|ƒs d}t|ƒ‚t|dƒ}| j|d� dS )z-Open file, check magic number and read headerrU   zNot a BMP filerC   )r8   N)rp   rq   r"   ÚSyntaxErrorr*   r”   )rˆ   Z	head_datar�   r8   r    r    r!   Ú_open7  s    
zBmpImageFile._openN)r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úformat_descriptionÚformatrv   ÚitemsÚkÚvÚvarsr”   r—   r    r    r    r!   r,   A   s    kr,   c                   @  s    e Zd ZdZdddœdd„ZdS )ÚBmpRleDecoderTz$bytes | Image.SupportsArrayInterfaceztuple[int, int])Úbufferr   c                 C  sˆ  | j d usJ ‚| jd }tƒ }d}| jj| jj }t|ƒ|k �rT| j  d¡}| j  d¡}|r`|sd�qT|d }|rú|| | jjkr’td| jj| ƒ}|rät	|d d? ƒ}	t	|d d@ ƒ}
t
|ƒD ]"}|d dkrØ||	7 }q¾||
7 }q¾n||| 7 }||7 }q2|d dk�r0t|ƒ| jj dk�r*|d7 }�qd}q2|d dk�rD�qTq2|d dk�rª| j  d¡}t|ƒdk �rp�qT| j  d¡\}}|d||| jj   7 }t|ƒ| jj }q2|�rö|d d }| j  |¡}|D ]&}|t	|d? ƒ7 }|t	|d@ ƒ7 }�qÌn|d }| j  |¡}||7 }t|ƒ|k �r$�qT||d 7 }| j  ¡ d dkr2| j  dtj¡ q2| jdk�rddnd}|  t|ƒ|d| jd	 f¡ d
S )Nr   r   r   é   r.   ó    rn   r   r9   )r9   r   )Úfdr“   Ú	bytearrayÚstateZxsizeZysizery   rq   Úmaxr   r„   r‡   rr   ÚosÚSEEK_CURr�   Z
set_as_rawr   )rˆ   r£   Zrle4ÚdatarK   Zdest_lengthZpixelsÚbyteZ
num_pixelsZfirst_pixelZsecond_pixelÚindexÚ
bytes_readÚrightÚupZ
byte_countZ	byte_readÚrawmoder    r    r!   ÚdecodeH  sj    


zBmpRleDecoder.decodeN)r˜   r™   rš   Z	_pulls_fdr³   r    r    r    r!   r¢   E  s   r¢   c                   @  s"   e Zd ZdZdZddœdd„ZdS )ÚDibImageFileZDIBr-   r6   r•   c                 C  s   |   ¡  d S )N)r”   )rˆ   r    r    r!   r—   •  s    zDibImageFile._openN)r˜   r™   rš   r�   rœ   r—   r    r    r    r!   r´   ‘  s   r´   )rm   r   r.   )rn   r   é   )r   r   rµ   )r   r   r   )rh   r   r   )rm   rn   r   r   rg   zImage.Imagez	IO[bytes]zstr | bytesr6   )Úimrp   Úfilenamer   c                 C  s   t | ||dƒ d S )NF)Ú_save)r¶   rp   r·   r    r    r!   Ú	_dib_save§  s    r¹   T)r¶   rp   r·   Úbitmap_headerr   c                 C  s,  zt | j \}}}W n< tyP } z$d| j› d�}t|ƒ|‚W Y d }~n
d }~0 0 | j}	|	 dd¡}
tdd„ |
D ƒƒ}| jd | d d	 d
 d@ }d}|| jd  }| jdkrÆd dd„ dD ƒ¡}nP| jdkrêd dd„ t	dƒD ƒ¡}n,| jdk�r| j
 dd¡}t|ƒd }nd }|�rld| |d  }|| }|dk�rJd}t|ƒ‚| dt|ƒ tdƒ t|ƒ ¡ | t|ƒt| jd ƒ t| jd ƒ tdƒ t|ƒ tdƒ t|ƒ t|d ƒ t|d ƒ t|ƒ t|ƒ ¡ | d|d  ¡ |�r | |¡ t | |t dd| j d||d f¡g¡ d S )!Nzcannot write mode z as BMPrN   )é`   r»   c                 s  s   | ]}t |d  d ƒV  qdS )rH   g      à?N)r5   rI   r    r    r!   rL   ¹  rM   z_save.<locals>.<genexpr>r   rA   r   r/   ro   r$   r   rm   rM   c                 s  s   | ]}t |ƒd  d V  qdS ©r/   r¥   Nr   ©rJ   Úir    r    r!   rL   À  rM   rl   rn   c                 s  s   | ]}t |ƒd  d V  qdS r¼   r   r½   r    r    r!   rL   Â  rM   rµ   r   r   r   r   rU   l   ÿÿ z)File size is too large for the BMP formatr   r¥   rW   )r   r   r9   )ÚSAVEr�   ÚKeyErrorr|   Zencoderinfor~   rw   ÚsizeÚjoinr„   r¶   Z
getpalettery   Ú
ValueErrorÚwriteÚo32Úo16r   r¸   r†   )r¶   rp   r·   rº   r²   r?   rG   Úer�   rx   rN   ÚppmZstrider7   Úimager…   r8   Ú	file_sizer    r    r!   r¸   «  s~     


ÿþýÿÿþýüûú
ù
ø	÷
öÿ
 ÿr¸   z.bmpz	image/bmprk   z.dib)T)%Ú
__future__r   rª   Útypingr   r   rV   r   r   r   Ú_binaryr	   ru   r
   r*   r   r   rÆ   r   rÅ   r   r‚   r"   r+   r,   Z	PyDecoderr¢   r´   r¿   r¹   r¸   Zregister_openr�   Zregister_saveZregister_extensionZregister_mimeZregister_decoderr    r    r    r!   Ú<module>   sR   ù
  Lû	 ÿJ