o
    üÞh�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d8dd„Zd8d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d9d.d/„Z	0d:d;d2d3„Ze ej ee¡ e !ej e¡ e "ej d4¡ e #ej d5¡ e $d6e¡ e ej ee¡ e !ej e¡ e "ej d7¡ e #ej d5¡ dS )<é    )Ú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ÚprefixÚbytesÚreturnÚboolc                 C  s
   |   d¡S )Nó   BM)Ú
startswith©r   © r    úR/var/www/html/premium_crap/venv/lib/python3.10/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:   ó   r+   c                   @  s\   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„Zddd„ZdS )ÚBmpImageFilez0Image plugin for the Windows Bitmap format (BMP)úWindows BitmapÚBMPr   r   é   é   r   é   )ÚRAWÚRLE8ÚRLE4Ú	BITFIELDSÚJPEGÚPNGÚheaderÚintÚoffsetr   ÚNonec                 C  sH  | j j| j j}}|r||ƒ t|dƒƒddœ}t|d tƒs!J ‚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 �rj|d dk|d< |d rpd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�rig 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ƒƒ||	< �qt|d* tƒ�s.J ‚t|d+ tƒ�s8J ‚t|d, tƒ�sBJ ‚t|d( tƒ�sLJ ‚|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¡�r¨|d  nd|d > |d < t|d  tƒ�sºJ ‚|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 �rx|d dEk�rK|d. ||d  v �rKt|d. t
ƒ�s5J ‚||d |d. f }dF|v �rFd>n| j| _np|d dGv �rr|d- ||d  v �rrt|d- t
ƒ�sgJ ‚||d |d- f }nIdH}
t|
ƒ‚dH}
t|
ƒ‚|d | j	d k�r�|d dEk�rœ|dIk�s—t�rœdJ\}| _n|d | j	dK | j	dL fv �r¯dM}ndN|d › d0�}
t|
ƒ‚| jdOk�rJd|d    k �rÏdPk�sÜn dQ|d  › d0�}
t|
ƒ‚t|d tƒ�sæJ ‚|d }|||d   ƒ}dR}|d  dk�rýdSntt|d  ƒƒ}t|ƒD ]\}}||| || d … }|t|ƒd k�r$dT}�q	|�r9|d  dk�r2dUndV| _| j}ndO| _t |dk�rEd:ndA|¡| _|d | jd< |g}|dMk�rf| |d | j	dL k¡ nt|d tƒ�spJ ‚| |d |d  dW d? dX@ ¡ | |d ¡ t |dd|d |d	 f|�p›| j  ¡ t
|ƒ¡g| _dYS )Zz Read relevant info about the BMPr   éÿÿÿÿ)Úheader_sizeÚ	directionr>   r#   r   Úwidthr0   ÚheightÚplanesé   Úbitsr3   Úcompressionr1   Úpalette_padding)r$   r%   r&   r'   r(   r)   é   éÿ   Úy_flipr   r?   l        r   é
   r   Ú	data_sizeé   r   Úpixels_per_meteré   Úcolorsc                 s  s   � | ]}|d  V  qdS )çóÒo_¯C@Nr    ©Ú.0Úxr    r    r!   Ú	<genexpr>„   s   € z'BmpImageFile._bitmap.<locals>.<genexpr>Údpir6   )Úr_maskÚg_maskÚb_maské0   r%   Úa_maské$   rV   rW   rX   Úrgb_maskÚ	rgba_maskzUnsupported BMP header type (ú)é   )Ú r`   zUnsupported BMP pixel depth (Úraw)©é  ÿ é ÿ  rH   r   ©ì      ~ rc   rd   r   ©rf   rd   rH   r   ©rf   rc   rd   rH   ©rH   rd   rc   rf   ©rc   rd   rH   rf   ©rf   rd   rH   rc   ©r   r   r   r   ©rc   rd   rH   ©i ø  ià  é   ©i |  ià  ro   )r   r   r   r   ÚXBGRÚBGXRÚABGRÚRGBAÚBGRAÚBGARr   zBGR;16r   ))r   rb   )r   re   )r   rg   )r   rh   )r   ri   )r   rj   )r   rk   )r   rl   )r   rm   )r   rn   )r   rp   r   ÚA)r   r   z Unsupported BMP bitfields layouté   )ru   rt   r4   r5   Úbmp_rlezUnsupported BMP compression (r   i   zUnsupported BMP Palette size (T©r   rH   FÚ1ÚLro   éüÿÿÿN)ÚfpÚreadÚseekr*   Ú
isinstancer:   r   Ú
_safe_readÚi16ÚCOMPRESSIONSÚtupleÚinfoÚlenÚappendÚ	enumerateÚOSErrorÚ_sizeÚgetÚBIT2MODEÚ_modeÚmodeÚUSE_RAW_ALPHAÚlistÚranger   r   ra   ÚpaletteÚ_TileÚtellÚtile)Úselfr9   r;   r   r€   Ú	file_infoÚheader_dataÚmasksÚidxÚmaskÚmsgÚraw_modeÚdecoder_nameÚ	SUPPORTEDÚ
MASK_MODESÚpaddingr“   Ú	grayscaleÚindicesÚindÚvalÚrgbÚargsr    r    r!   Ú_bitmapM   s>  
þ	ÿýþÿýü€
ÿ
ý 
ôõ
€þÿý€ÿ
"ü
ÿzBmpImageFile._bitmapc                 C  s:   | j  d¡}t|ƒsd}t|ƒ‚t|dƒ}| j|d� dS )z-Open file, check magic number and read headerr_   zNot a BMP filerJ   )r;   N)r~   r   r"   ÚSyntaxErrorr*   r©   )r—   Ú	head_datar�   r;   r    r    r!   Ú_open7  s   
zBmpImageFile._openN©r   r   )r9   r:   r;   r:   r   r<   ©r   r<   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úformat_descriptionÚformatr„   ÚitemsÚkÚvÚvarsr©   r¬   r    r    r    r!   r-   A   s     kr-   c                   @  s   e Zd ZdZd	dd„ZdS )
ÚBmpRleDecoderTÚbufferú$bytes | Image.SupportsArrayInterfacer   útuple[int, int]c                 C  sŒ  | j d usJ ‚| jd }tƒ }d}| jj| jj }t|ƒ|k �r,| j  d¡}| j  d¡}|r0|s1nû|d }|r||| | jjkrHtd| jj| ƒ}|rqt	|d d? ƒ}	t	|d d@ ƒ}
t
|ƒD ]}|d dkrk||	7 }q^||
7 }q^n||| 7 }||7 }nª|d dkr�t|ƒ| jj dkrš|d7 }t|ƒ| jj dksŒd}n‰|d dkr¤nˆ|d dkrÔ| j  d¡}t|ƒdk r·nu| j  d¡\}}|d||| jj   7 }t|ƒ| jj }nR|rø|d d }| j  |¡}|D ]}|t	|d? ƒ7 }|t	|d@ ƒ7 }qän|d }| j  |¡}||7 }t|ƒ|k �rn||d 7 }| j  ¡ d dk�r&| j  dtj¡ t|ƒ|k s | jdk�r4dnd}|  t|ƒ|d| jd	 f¡ d
S )Nr   r   r   é   r0   ó    r|   r   r=   )r=   r   )Úfdr¨   Ú	bytearrayÚstateÚxsizeÚysizer‡   r   Úmaxr   r’   r•   r€   ÚosÚSEEK_CURr�   Ú
set_as_rawr   )r—   rº   Úrle4ÚdatarS   Údest_lengthÚpixelsÚbyteÚ
num_pixelsÚfirst_pixelÚsecond_pixelÚindexÚ
bytes_readÚrightÚupÚ
byte_countÚ	byte_readÚrawmoder    r    r!   ÚdecodeH  sr   


ü
ÿþÆ;zBmpRleDecoder.decodeN)rº   r»   r   r¼   )r¯   r°   r±   Ú	_pulls_fdr×   r    r    r    r!   r¹   E  s    r¹   c                   @  s   e Zd ZdZdZddd„ZdS )	ÚDibImageFileÚDIBr.   r   r<   c                 C  s   |   ¡  d S )N)r©   )r—   r    r    r!   r¬   •  r,   zDibImageFile._openNr®   )r¯   r°   r±   r´   r³   r¬   r    r    r    r!   rÙ   ‘  s    rÙ   )r{   r   r0   )r|   r   é   )r   r   rÛ   )r   r   r   )ru   r   r   )r{   r|   r   r   rt   ÚimúImage.Imager~   ú	IO[bytes]Úfilenameústr | bytesr<   c                 C  s   t | ||dƒ d S )NF)Ú_save)rÜ   r~   rß   r    r    r!   Ú	_dib_save§  s   râ   TÚbitmap_headerc                 C  s  z
t | j \}}}W n ty" } zd| j› d�}t|ƒ|‚d }~ww | 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 ƒ¡}n'| jdkrod dd„ t	dƒD ƒ¡}n| jdkr‚| j
 dd¡}t|ƒd }nd }|r­d| |d  }|| }|dkrœd}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 BMPrU   )é`   rä   c                 s  s    � | ]}t |d  d ƒV  qdS )rP   g      à?N)r:   rQ   r    r    r!   rT   ¹  ó   € z_save.<locals>.<genexpr>r   rG   r   r1   r}   r$   r   r{   ó    c                 s  ó    � | ]}t |ƒd  d V  qdS ©r1   r¾   Nr   ©rR   Úir    r    r!   rT   À  rå   rz   r|   c                 s  rç   rè   r   ré   r    r    r!   rT   Â  rå   rÛ   r   r   r   r   r_   l   ÿÿ z)File size is too large for the BMP formatr   r¾   ra   r­   r=   )ÚSAVEr�   ÚKeyErrorrŠ   ÚencoderinforŒ   r…   ÚsizeÚjoinr’   rÜ   Ú
getpaletter‡   Ú
ValueErrorÚwriteÚo32Úo16r   rá   r”   )rÜ   r~   rß   rã   rÖ   rD   rO   Úer�   r†   rU   ÚppmÚstrider9   Úimager“   r;   Ú	file_sizer    r    r!   rá   «  s‚   
€þ


ÿþýÿÿþýüûú
ù
ø	÷
öÿ
 ÿrá   z.bmpz	image/bmpry   z.dib)r   r   r   r   )rÜ   rÝ   r~   rÞ   rß   rà   r   r<   )T)
rÜ   rÝ   r~   rÞ   rß   rà   rã   r   r   r<   )%Ú
__future__r   rÅ   Útypingr   r   r`   r   r   r   Ú_binaryr	   rƒ   r
   r*   r   r   rô   r   ró   r�   r�   r"   r+   r-   Ú	PyDecoderr¹   rÙ   rë   râ   rá   Úregister_openr´   Úregister_saveÚregister_extensionÚregister_mimeÚregister_decoderr    r    r    r!   Ú<module>   sT   ù


  Lû
	ÿJ