o
    ÒèFhEE  ã                   @  s`  d dl mZ d dl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d„ Z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"„ Zd*d$d%„Ze ejee¡ e eje¡ e ejd&¡ e ejd'¡ e  d(e¡ e ejee¡ e eje¡ e ejd)¡ e ejd'¡ dS )+é    )ÚannotationsNé   )Ú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   é   é   é   é   é    c                 C  s   | d d… dkS )Né   ó   BM© ©Úprefixr   r   úK/var/www/html/loop/nvenv/lib/python3.10/site-packages/PIL/BmpImagePlugin.pyÚ_accept3   s   r   c                 C  s   t | ƒdv S )N)é   é(   é@   él   é|   )Úi32r   r   r   r   Ú_dib_accept7   ó   r$   c                   @  sX   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„Zdd„ ZdS )ÚBmpImageFilez0Image plugin for the Windows Bitmap format (BMP)úWindows BitmapÚBMPr   r   r   é   r   é   )ÚRAWÚRLE8ÚRLE4Ú	BITFIELDSÚJPEGÚPNGc              
   C  sâ  | j j| j j}}|r||ƒ t|dƒƒddœ}t | j |d d ¡}|d dkrOt|dƒ|d< t|dƒ|d	< t|dƒ|d
< t|dƒ|d< | j|d< d|d< nÓ|d dv �r|d dk|d< |d rddnd|d< t|dƒ|d< |d sxt|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 d!„ |d D ƒƒ| j	d"< |d | j
k�rt|ƒd#krçtg d$¢ƒD ]\}}t|d%|d  ƒ||< qÖnd|d&< d'D ]
}t|dƒƒ||< qí|d( |d) |d* f|d+< |d( |d) |d* |d& f|d,< nd-|d › d.�}	t|	ƒ‚|d |d	 f| _| dd¡�r6|d nd|d > |d< |d/|d  k�rV|d dk�rV|d|d  7 }t |d d0¡\| _}
| jd1u �rsd2|d › d.�}	t|	ƒ‚d3}|d | j
k�rìg d4¢d5gd6d7gd8œ}d9d:d;d<d=d=d>d?d@dAœ	}|d |v �ræ|d dBk�rÃ|d, ||d  v �rÃ||d |d, f }
dC|
v �r¾d<n| j| _n]|d dDv �rà|d+ ||d  v �rà||d |d+ f }
n@dE}	t|	ƒ‚dE}	t|	ƒ‚|d | jk�r|d dBk�r|dFk�rdG\}
| _n|d | j| jfv �rdH}ndI|d › d.�}	t|	ƒ‚| jdJk�r¥d|d   k �r4dKk�sAn dL|d › d.�}	t|	ƒ‚|d }|||d  ƒ}dM}|d dk�rXdNntt|d ƒƒ}t|ƒD ]\}}||| || d … }|t|ƒd k�rdO}�qd|�r”|d dk�r�dPndQ| _| j}
ndJ| _t |dk�r d9nd>|¡| _|d | j	d< |
g}|dHk�r¿| |d | jk¡ n| |d |d  dR d? dS@ ¡ | |d ¡ |dd|d |d	 f|�pè| j  ¡ t|ƒfg| _d1S )Tz Read relevant info about the BMPr   éÿÿÿÿ)Úheader_sizeÚ	directionr2   r   r   Úwidthr   ÚheightÚplanesé   ÚbitsÚcompressionr)   Úpalette_padding)r   r    r!   r"   é   éÿ   Úy_flipr   r3   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>v   s   € z'BmpImageFile._bitmap.<locals>.<genexpr>Údpié4   )Úr_maskÚg_maskÚb_maskÚa_maské$   rN   )rK   rL   rM   rK   rL   rM   Úrgb_maskÚ	rgba_maskzUnsupported BMP header type (ú)é   )NNNzUnsupported BMP pixel depth (Úraw)©é  ÿ é ÿ  r<   r   ©ì      ~ rV   rW   r   ©rY   rV   rW   r<   ©r<   rW   rV   rY   ©rV   rW   r<   rY   ©r   r   r   r   ©rV   rW   r<   ©i ø  ià  é   ©i |  ià  r`   )r   r   r   r   ÚXBGRÚABGRÚRGBAÚBGRAr   zBGR;16r   )	)r   rU   )r   rX   )r   rZ   )r   r[   )r   r\   )r   r]   )r   r^   )r   r_   )r   ra   r   ÚA)r   r   z Unsupported BMP bitfields layouté   )re   rd   Úbmp_rlezUnsupported BMP compression (r   i   zUnsupported BMP Palette size (T©r   r<   FÚ1ÚLr`   éüÿÿÿ)ÚfpÚreadÚseekr#   r   Ú
_safe_readÚi16r+   ÚtupleÚinfor.   ÚlenÚ	enumerateÚOSErrorÚ_sizeÚgetÚBIT2MODEÚ_modeÚmoder,   r-   ÚlistÚranger
   r   rT   ÚpaletteÚappendÚtellÚtile)ÚselfÚheaderÚoffsetrn   ro   Ú	file_infoÚheader_dataÚidxÚmaskÚmsgÚraw_modeÚdecoder_nameÚ	SUPPORTEDÚ
MASK_MODESÚpaddingr~   Ú	grayscaleÚindicesÚindÚvalÚrgbÚargsr   r   r   Ú_bitmapJ   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 headerrS   zNot a BMP filer>   )r„   N)rm   rn   r   ÚSyntaxErrorr#   r•   )r‚   Ú	head_datar‰   r„   r   r   r   Ú_open  s   
zBmpImageFile._openN©r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úformat_descriptionÚformatÚCOMPRESSIONSÚitemsÚkÚvÚvarsr•   r˜   r   r   r   r   r&   >   s    
 Hr&   c                   @  s   e Zd ZdZdd„ ZdS )ÚBmpRleDecoderTc                 C  s~  | j d }tƒ }d}| jj| jj }t|ƒ|k �r%| j d¡}| j d¡}|r)|s*nû|d }|ru|| | jjkrAtd| jj| ƒ}|rjt	|d d? ƒ}	t	|d d@ ƒ}
t
|ƒD ]}|d dkrd||	7 }qW||
7 }qWn||| 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�r-dnd}|  t|ƒ|d| j d	 f¡ d
S )Nr   r   r   é   r   ó    rk   r   r1   )r1   r   )r”   Ú	bytearrayÚstateÚxsizeÚysizert   Úfdrn   Úmaxr
   r}   r€   ro   ÚosÚSEEK_CURr{   Ú
set_as_rawÚbytes)r‚   ÚbufferÚrle4ÚdatarG   Údest_lengthÚpixelsÚbyteÚ
num_pixelsÚfirst_pixelÚsecond_pixelÚindexÚ
bytes_readÚrightÚupÚ
byte_countÚ	byte_readÚrawmoder   r   r   Údecode"  sp   


ü
ÿþÆ;zBmpRleDecoder.decodeN)rš   r›   rœ   Ú	_pulls_fdrÂ   r   r   r   r   r¥     s    r¥   c                   @  s   e Zd ZdZdZdd„ ZdS )ÚDibImageFileÚDIBr'   c                 C  s   |   ¡  d S )N)r•   )r‚   r   r   r   r˜   n  r%   zDibImageFile._openN)rš   r›   rœ   rŸ   rž   r˜   r   r   r   r   rÄ   j  s    rÄ   )rj   r   r   )rk   r   é   )r   r   rÆ   )r   r   r   )re   r   r   )rj   rk   r   r   rd   c                 C  s   t | ||dƒ d S )NF)Ú_save)Úimrm   Úfilenamer   r   r   Ú	_dib_save€  s   rÊ   Tc              
   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 | |dd| j d||d ffg¡ d S )!Nzcannot write mode z as BMPrI   )é`   rË   c                 s  s    � | ]}t |d  d ƒV  qdS )rD   g      à?N)ÚintrE   r   r   r   rH   �  s   € z_save.<locals>.<genexpr>r   r;   r   r)   rl   r   r   rj   ó    c                 s  ó   � | ]	}t |ƒd  V  qdS ©r   Nr	   ©rF   Úir   r   r   rH   —  ó   € ri   rk   c                 s  rÎ   rÏ   r	   rÐ   r   r   r   rH   ™  rÒ   rÆ   r   r   r   r   rS   l   ÿÿ z)File size is too large for the BMP formatr   r§   rT   r™   r1   )ÚSAVEr{   ÚKeyErrorrv   Úencoderinforx   rr   ÚsizeÚjoinr}   rÈ   Ú
getpalettert   Ú
ValueErrorÚwriteÚo32Úo16r   rÇ   )rÈ   rm   rÉ   Úbitmap_headerrÁ   r8   rC   Úer‰   rs   rI   ÚppmÚstriderƒ   Úimager~   r„   Ú	file_sizer   r   r   rÇ   „  s~   
€þ


ÿþýÿÿþýüûú
ù
ø	÷
öÿ
(rÇ   z.bmpz	image/bmprh   z.dib)T)!Ú
__future__r   r®   Ú r   r   r   Ú_binaryr   rq   r   r#   r
   r   rÜ   r   rÛ   ry   r   r$   r&   Ú	PyDecoderr¥   rÄ   rÓ   rÊ   rÇ   Úregister_openrŸ   Úregister_saveÚregister_extensionÚregister_mimeÚregister_decoderr   r   r   r   Ú<module>   sL   ù bKû	
F