o
    svXjE  ã                   @   sT  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 )*é    Né   )Ú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   úO/var/www/html/myproject/venv/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Ú	directionr1   r   r   Úwidthr   ÚheightÚplanesé   ÚbitsÚcompressionr(   Úpalette_padding)r   r   r    r!   é   éÿ   Úy_flipr   r2   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é$   rL   )rI   rJ   rK   rI   rJ   rK   Úrgb_maskÚ	rgba_maskzUnsupported BMP header type (ú)é   )NNNzUnsupported BMP pixel depth (Úraw)©é  ÿ é ÿ  r;   r   ©ì      ~ rT   rU   r   ©rW   rT   rU   r;   ©r;   rU   rT   rW   ©rT   rU   r;   rW   ©r   r   r   r   ©rT   rU   r;   ©i ø  ià  é   ©i |  ià  r^   )r   r   r   r   ÚXBGRÚABGRÚRGBAÚBGRAr   zBGR;16r   )	)r   rS   )r   rV   )r   rX   )r   rY   )r   rZ   )r   r[   )r   r\   )r   r]   )r   r_   r   ÚA)r   r   z Unsupported BMP bitfields layouté   )rc   rb   Ú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Úmoder+   r,   ÚlistÚranger	   r   rR   ÚpaletteÚappendÚtellÚtile)ÚselfÚheaderÚoffsetrl   rm   Ú	file_infoÚheader_dataÚidxÚmaskÚmsgÚraw_modeÚdecoder_nameÚ	SUPPORTEDÚ
MASK_MODESÚpaddingr{   Ú	greyscaleÚ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 headerrQ   zNot a BMP filer=   )r�   N)rk   rl   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}t|ƒ| jj| jj k �r*| j d¡}| j d¡}|r'|s)�n|d }|rt|| | jjkr@td| jj| ƒ}|rit	|d d? ƒ}t	|d d@ ƒ}	t
|ƒD ]}
|
d dkrc||7 }qV||	7 }qVn||| 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¯n{| 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|ƒ| jj| jj k s| jdk�r2dnd}|  t|ƒ|d| j d	 f¡ d
S )Nr   r   r   é   r   ó    ri   r   r0   )r0   r   )r‘   Ú	bytearrayrr   ÚstateÚxsizeÚysizeÚfdrl   Úmaxr	   rz   r}   rm   ÚosÚSEEK_CURrx   Ú
set_as_rawÚbytes)r   ÚbufferÚrle4ÚdatarE   ÚpixelsÚbyteÚ
num_pixelsÚfirst_pixelÚsecond_pixelÚindexÚ
bytes_readÚrightÚupÚ
byte_countÚ	byte_readÚrawmoder   r   r   Údecode"  sn   


ü
ÿþÆ;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•   m  r$   zDibImageFile._openN)r—   r˜   r™   rœ   r›   r•   r   r   r   r   rÀ   i  s    rÀ   )rh   r   r   )ri   r   é   )r   r   rÂ   )r   r   r   )rc   r   r   )rh   ri   r   r   rb   c                 C   s   t | ||dƒ d S )NF)Ú_save)Úimrk   Ú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t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 BMPrG   )é`   rÇ   c                 S   s   t | d d ƒS )NrC   g      à?)Úint)rE   r   r   r   Ú<lambda>�  s    z_save.<locals>.<lambda>r   r:   r   r(   rj   r   r   rh   ó    c                 s   ó   � | ]	}t |ƒd  V  qdS ©r   Nr   ©rD   Úir   r   r   rF   –  ó   € z_save.<locals>.<genexpr>rg   ri   c                 s   rË   rÌ   r   rÍ   r   r   r   rF   ˜  rÏ   rÂ   r   r   r   r   rQ   l   ÿÿ z)File size is too large for the BMP formatr   r¤   rR   r–   r0   )ÚSAVErx   ÚKeyErrorrt   Úencoderinforv   rp   ÚmapÚsizeÚjoinrz   rÄ   Ú
getpaletterr   Ú
ValueErrorÚwriteÚo32Úo16r   rÃ   )rÄ   rk   rÅ   Úbitmap_headerr½   r7   rB   Úer†   rq   rG   ÚppmÚstrider€   Úimager{   r�   Ú	file_sizer   r   r   rÃ   ƒ  s~   
€þ


ÿþýÿÿþýüûú
ù
ø	÷
öÿ
(rÃ   z.bmpz	image/bmprf   z.dib)T)r«   Ú r   r   r   Ú_binaryr   ro   r   r"   r	   r
   rÚ   r   rÙ   rw   r   r#   r%   Ú	PyDecoderr¢   rÀ   rÐ   rÆ   rÃ   Úregister_openrœ   Úregister_saveÚregister_extensionÚregister_mimeÚregister_decoderr   r   r   r   Ú<module>   sJ   ù bJû	
F