a
    ¥Q•h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   úK/var/www/sistema_ama/venv/lib/python3.9/site-packages/PIL/BmpImagePlugin.pyÚ_accept3   s    r   c                 C   s   t | ƒdv S )N)é   é(   é@   él   é|   )Úi32r   r   r   r   Ú_dib_accept7   s    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 BitmapZ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r t|dƒ|d< t|dƒ|d	< t|dƒ|d
< t|dƒ|d< | j|d< d|d< �n¬|d dv �r4|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�rLt|ƒ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¡�rt|d n
d|d > |d< |d/|d  k�r´|d dk�r´|d|d  7 }t |d d0¡\| _}
| jd1u �rîd2|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| _nF|d dDv �rÈ|d+ ||d  v �rÈ||d |d+ f }
ndE}	t|	ƒ‚ndE}	t|	ƒ‚nh|d | jk�r|d dBk�rL|dFk�rLdG\}
| _n4|d | j| jfv �r4dH}ndI|d › d.�}	t|	ƒ‚| jdJk�rXd|d   k �rtdKk�s�n dL|d › d.�}	t|	ƒ‚nÈ|d }|||d  ƒ}dM}|d dk�r¾dNntt|d ƒƒ}t|ƒD ]8\}}||| || d … }|t|ƒd k�rÖdO}�qÖ|�r6|d dk�r(dPndQ| _| j}
n"dJ| _t |dk�rNd9n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Ú	directionr/   r   r   Úwidthr   ÚheightZplanesé   ÚbitsÚcompressionr&   Zpalette_padding)r   r   r    r!   é   éÿ   Zy_flipr   r0   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>v   ó    z'BmpImageFile._bitmap.<locals>.<genexpr>Údpié4   )Úr_maskÚg_maskÚb_maskÚa_maské$   rG   )rD   rE   rF   rD   rE   rF   Zrgb_maskZ	rgba_maskzUnsupported BMP header type (ú)é   )NNNzUnsupported BMP pixel depth (Úraw)©é  ÿ é ÿ  r7   r   ©ì      ~ rM   rN   r   ©rP   rM   rN   r7   ©r7   rN   rM   rP   ©rM   rN   r7   rP   ©r   r   r   r   ©rM   rN   r7   ©i ø  ià  é   ©i |  ià  rW   )r   r   r   r   ZXBGRZABGRÚRGBAÚBGRAr   zBGR;16r   )	)r   rL   )r   rO   )r   rQ   )r   rR   )r   rS   )r   rT   )r   rU   )r   rV   )r   rX   r   ÚA)r   r   z Unsupported BMP bitfields layouté   )rZ   rY   Úbmp_rlezUnsupported BMP compression (r   i   zUnsupported BMP Palette size (T©r   r7   FÚ1ÚLrW   éüÿÿÿ)ÚfpÚreadÚseekr"   r   Ú
_safe_readÚi16r(   ÚtupleÚinfor+   ÚlenÚ	enumerateÚOSErrorÚ_sizeÚgetÚBIT2MODEÚ_modeÚmoder)   r*   ÚlistÚranger	   r   rK   ÚpaletteÚappendÚtellÚtile)ÚselfÚheaderÚoffsetrc   rd   Ú	file_infoZheader_dataÚidxÚmaskÚmsgZraw_modeÚdecoder_nameZ	SUPPORTEDZ
MASK_MODESÚpaddingrs   Z	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 headerrJ   zNot a BMP filer8   )ry   N)rb   rc   r   ÚSyntaxErrorr"   r…   )rw   Z	head_datar}   ry   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   
 Hr$   c                   @   s   e Zd ZdZdd„ ZdS )ÚBmpRleDecoderTc                 C   st  | j d }tƒ }d}t|ƒ| jj| jj k �r@| j d¡}| j d¡}|rN|sR�q@|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 }q|d dk�rt|ƒ| jj dk�r|d7 }qöd}q|d dk�r0�q@q|d dk�r–| j d¡}t|ƒdk �r\�q@| j d¡\}}|d||| jj   7 }t|ƒ| jj }q|�râ|d d }| j |¡}|D ]&}|t	|d? ƒ7 }|t	|d@ ƒ7 }�q¸n|d }| j |¡}||7 }t|ƒ|k �r�q@||d 7 }| j ¡ d dkr| j dtj¡ q| jdk�rPdnd}|  t|ƒ|d| j d	 f¡ d
S )Nr   r   r   é   r   ó    r`   r   r.   )r.   r   )r„   Ú	bytearrayri   ÚstateÚxsizeÚysizeÚfdrc   Úmaxr	   rr   ru   rd   ÚosÚSEEK_CURrp   Ú
set_as_rawÚbytes)rw   ÚbufferZrle4Údatar?   ÚpixelsÚbyteZ
num_pixelsZfirst_pixelZsecond_pixelÚindexÚ
bytes_readÚrightÚupZ
byte_countZ	byte_readÚrawmoder   r   r   Údecode"  sf    



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 )ÚDibImageFileZDIBr%   c                 C   s   |   ¡  d S )N)r…   )rw   r   r   r   r‡   m  s    zDibImageFile._openN)rˆ   r‰   rŠ   r�   rŒ   r‡   r   r   r   r   rª   i  s   rª   )r_   r   r   )r`   r   é   )r   r   r«   )r   r   r   )rZ   r   r   )r_   r`   r   r   rY   c                 C   s   t | ||dƒ d S )NF)Ú_save)Úimrb   Úfilenamer   r   r   Ú	_dib_save  s    r¯   Tc              
   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t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 | |dd | j d||d!ffg¡ d S )"Nzcannot write mode z as BMPrB   )é`   r°   c                 S   s   t | d d ƒS )Nr=   g      à?)Úint)r?   r   r   r   Ú<lambda>�  rA   z_save.<locals>.<lambda>r   r6   r   r&   ra   r   r   r_   rA   c                 s   s   | ]}t |ƒd  V  qdS ©r   Nr   ©r>   Úir   r   r   r@   –  rA   z_save.<locals>.<genexpr>r^   r`   c                 s   s   | ]}t |ƒd  V  qdS r³   r   r´   r   r   r   r@   ˜  rA   r«   r   r   r   r   rJ   l   ÿÿ z)File size is too large for the BMP formatr   r”   rK   )r   r   r.   )ÚSAVErp   ÚKeyErrorrk   Úencoderinform   rg   ÚmapÚsizeÚjoinrr   r­   Ú
getpaletteri   Ú
ValueErrorÚwriteÚo32Úo16r   r¬   )r­   rb   r®   Zbitmap_headerr§   r4   r<   Úer}   rh   rB   ZppmÚstriderx   Úimagers   ry   Ú	file_sizer   r   r   r¬   ƒ  sz     


ÿþýÿÿþýüûú
ù
ø	÷
öÿ
r¬   z.bmpz	image/bmpr]   z.dib)T)r›   Ú r   r   r   Ú_binaryr   rf   r   r"   r	   r
   rÀ   r   r¿   rn   r   r#   r$   Ú	PyDecoderr’   rª   r¶   r¯   r¬   Úregister_openr�   Úregister_saveÚregister_extensionÚregister_mimeÚregister_decoderr   r   r   r   Ú<module>   sH   ù bJû	
F