U
    M»{j…H  ã                   @  s–  d dl mZ d dlZd dl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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d4d%d&d'dd(d-œd.d/„Ze ejee¡ e eje¡ e  ejd0¡ e !ejd1¡ e "d2e¡ e ejee¡ e eje¡ e  ejd3¡ e !ejd1¡ dS )5é    )ÚannotationsN)ÚIOé   )Ú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   é   é   é   é   é    ÚbytesÚbool)ÚprefixÚreturnc                 C  s   | d d… dkS )Né   ó   BM© ©r   r   r   úQ/var/www/html/bwave/python/venv/lib/python3.8/site-packages/PIL/BmpImagePlugin.pyÚ_accept4   s    r!   c                 C  s   t | ƒdkS )N)é   é(   é4   é8   é@   él   é|   )Úi32r   r   r   r    Ú_dib_accept8   s    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„Zddœdd„ZdS )ÚBmpImageFilez0Image plugin for the Windows Bitmap format (BMP)úWindows BitmapZBMPr   r   r   é   r   é   )ÚRAWÚRLE8ÚRLE4Ú	BITFIELDSZJPEGZPNGc                 C  s(  | j j| j j }}|r||ƒ t|dƒƒddœ}t | j |d d ¡}|d dkr t|dƒ|d< t|dƒ|d	< t|dƒ|d
< t|dƒ|d< | j|d< d|d< �nÔ|d dk�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 d!„ |d D ƒƒ| j	d"< |d | j
k�rtd#d$d%g}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|d# |d$ |d% f|d*< |d# |d$ |d% |d( f|d+< nd,|d › d-�}
t|
ƒ‚|d |d	 f| _| dd¡�rœ|d n
d|d > |d< |d.|d  k�rÜ|d dk�rÜ|d|d  7 }t |d d/¡\| _}| jd0k�rd1|d › d-�}
t|
ƒ‚d2}|d | j
k�rd3d4d5d6d7d8d9d:gd;gd<d=gd>œ}d?d@dAdBdCdDdEdDdFdGdHdIœ}|d |k�r|d dJk�rÆ|d+ ||d  k�rÆ||d |d+ f }dK|k�r¼dCn| j| _nF|d dLk�r |d* ||d  k�r ||d |d* f }ndM}
t|
ƒ‚ndM}
t|
ƒ‚nh|d | jk�rP|d dJk�r„|dNk�r„dO\}| _n4|d | j| jfk�rldP}ndQ|d › d-�}
t|
ƒ‚| jdRk�r�d|d   k �r¬dSk�sÈn dT|d › d-�}
t|
ƒ‚nÈ|d }|||d  ƒ}dU}|d dk�rödVntt|d ƒƒ}t|ƒD ]8\}}||| || d … }|t|ƒd k�rdW}�q|�rn|d dk�r`dXndY| _| j}n"dR| _t |dk�r†d?ndF|¡| _|d | j	d< |g}|dPk�rÄ| |d | jk¡ n"| |d |d  dZ d? d[@ ¡ | |d ¡ |dd|d |d	 f|�p| j  ¡ t|ƒfg| _d0S )\z Read relevant info about the BMPr   éÿÿÿÿ)Úheader_sizeÚ	directionr4   r"   r   Úwidthr   ÚheightZplanesé   ÚbitsÚcompressionr-   Zpalette_padding)r#   r$   r%   r&   r'   r(   é   éÿ   Zy_flipr   r5   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>}   s     z'BmpImageFile._bitmap.<locals>.<genexpr>ÚdpiZr_maskZg_maskZb_maské0   r$   Za_maské$   Zrgb_maskZ	rgba_maskzUnsupported BMP header type (ú)é   )NNNzUnsupported BMP pixel depth (Úraw©é  ÿ é ÿ  r<   r   ©ì      ~ rN   rO   r   ©rQ   rO   r<   r   ©rQ   rN   rO   r<   ©r<   rO   rN   rQ   ©rN   rO   r<   rQ   ©rQ   rO   r<   rN   ©r   r   r   r   ©rN   rO   r<   ©i ø  ià  é   ©i |  ià  rZ   )r   r   r   r   ZXBGRZBGXRZABGRÚRGBAÚBGRAZBGARr   zBGR;16r   ))r   rM   )r   rP   )r   rR   )r   rS   )r   rT   )r   rU   )r   rV   )r   rW   )r   rX   )r   rY   )r   r[   r   ÚA)r   r   z Unsupported BMP bitfields layouté   )r]   r\   Úbmp_rlezUnsupported BMP compression (r   i   zUnsupported BMP Palette size (T©r   r<   FÚ1ÚLrZ   éüÿÿÿ)ÚfpÚreadÚseekr)   r   Ú
_safe_readÚi16r/   ÚtupleÚinfor2   ÚlenÚappendÚ	enumerateÚOSErrorÚ_sizeÚgetÚBIT2MODEÚ_modeÚmoder0   r1   ÚlistÚranger   r   rL   ÚpaletteÚtellZtile)ÚselfÚheaderÚoffsetrf   rg   Ú	file_infoZheader_dataZmasksÚidxÚmaskÚmsgZraw_modeZdecoder_nameZ	SUPPORTEDZ
MASK_MODESÚpaddingrw   Z	grayscaleÚindicesÚindÚvalÚrgbÚargsr   r   r    Ú_bitmapK   s&   
	ÿýþ

ýü

ÿ
ý ø
ôõ
ÿþ
ÿþ



ÿý ÿ
"üÿzBmpImageFile._bitmapÚNone©r   c                 C  s:   | j  d¡}t|ƒs d}t|ƒ‚t|dƒ}| j|d� dS )z-Open file, check magic number and read headerrK   zNot a BMP filer=   )r{   N)re   rf   r!   ÚSyntaxErrorr)   r†   )ry   Z	head_datar   r{   r   r   r    Ú_open  s    
zBmpImageFile._openN)r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úformat_descriptionÚformatZCOMPRESSIONSÚitemsÚkÚvÚvarsr†   rŠ   r   r   r   r    r+   ?   s   
 Ur+   c                   @  s    e Zd ZdZdddœdd„ZdS )ÚBmpRleDecoderTr   ztuple[int, int])Úbufferr   c                 C  sˆ  | j d k	st‚| 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   ó    rc   r   r3   )r3   r   )ÚfdÚAssertionErrorr…   Ú	bytearrayÚstateZxsizeZysizerl   rf   Úmaxr   rv   rx   rg   ÚosÚSEEK_CURrt   Z
set_as_rawr   )ry   r–   Zrle4ÚdatarE   Zdest_lengthZpixelsÚbyteZ
num_pixelsZfirst_pixelZsecond_pixelÚindexZ
bytes_readÚrightÚupZ
byte_countZ	byte_readÚrawmoder   r   r    Údecode0  sj    


zBmpRleDecoder.decodeN)r‹   rŒ   r�   Z	_pulls_fdr¦   r   r   r   r    r•   -  s   r•   c                   @  s"   e Zd ZdZdZddœdd„ZdS )ÚDibImageFileZDIBr,   r‡   rˆ   c                 C  s   |   ¡  d S )N)r†   )ry   r   r   r    rŠ   }  s    zDibImageFile._openN)r‹   rŒ   r�   r�   r�   rŠ   r   r   r   r    r§   y  s   r§   )rb   r   r   )rc   r   é   )r   r   r¨   )r   r   r   )r]   r   r   )rb   rc   r   r   r\   zImage.Imagez	IO[bytes]zstr | bytesr‡   )Úimre   Úfilenamer   c                 C  s   t | ||dƒ d S )NF)Ú_save)r©   re   rª   r   r   r    Ú	_dib_save�  s    r¬   T)r©   re   rª   Úbitmap_headerr   c              
   C  s&  zt | j \}}}W n: tk
rN } zd| j› d�}t|ƒ|‚W 5 d }~X Y nX | 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 }|�rjd| |d  }|| }|dk�rHd}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 ƒV  qdS )rB   g      à?N)ÚintrC   r   r   r    rF   ¡  s     z_save.<locals>.<genexpr>r   r;   r   r-   rd   r#   r   rb   ó    c                 s  s   | ]}t |ƒd  V  qdS ©r   Nr
   ©rD   Úir   r   r    rF   ¨  s     ra   rc   c                 s  s   | ]}t |ƒd  V  qdS r±   r
   r²   r   r   r    rF   ª  s     r¨   r   r   r   r   rK   l   ÿÿ z)File size is too large for the BMP formatr   r˜   rL   )r   r   r3   )ÚSAVErt   ÚKeyErrorro   Zencoderinforq   rj   ÚsizeÚjoinrv   r©   Z
getpaletterl   Ú
ValueErrorÚwriteÚo32Úo16r   r«   )r©   re   rª   r­   r¥   r9   rA   Úer   rk   rG   ÚppmZstriderz   Úimagerw   r{   Ú	file_sizer   r   r    r«   “  sz    


ÿþýÿÿþýüûú
ù
ø	÷
öÿ
r«   z.bmpz	image/bmpr`   z.dib)T)#Ú
__future__r   rž   Útypingr   Ú r   r   r   Ú_binaryr   ri   r	   r)   r   r   r»   r   rº   rr   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>   sN   ù oLû	 ÿH