o
    Ñ­j…H  ã                   @  sv  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d7dd„Zd7d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d8d-d.„Z	/d9d:d1d2„Ze ejee¡ e eje¡ e  ejd3¡ e !ejd4¡ e "d5e¡ e ejee¡ e eje¡ e  ejd6¡ e !ejd4¡ dS );é    )Ú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   é   é   é   é   é    ÚprefixÚbytesÚreturnÚboolc                 C  s   | d d… dkS )Né   ó   BM© ©r   r   r   úO/var/www/html/CropPilot/venv/lib/python3.10/site-packages/PIL/BmpImagePlugin.pyÚ_accept4   s   r!   c                 C  s   t | ƒdv S )N)é   é(   é4   é8   é@   él   é|   )Úi32r   r   r   r    Ú_dib_accept8   ó   r*   c                   @  sZ   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„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'g 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ÿ|d( |d) |d* f|d+< |d( |d) |d* |d& f|d,< nd-|d › d.�}
t|
ƒ‚|d |d	 f| _| dd¡�rH|d nd|d > |d< |d/|d  k�rh|d dk�rh|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@dAdBdCœ}|d |v �rú|d dDk�r×|d, ||d  v �r×||d |d, f }dE|v �rÒd=n| j| _n]|d dFv �rô|d+ ||d  v �rô||d |d+ f }n@dG}
t|
ƒ‚dG}
t|
ƒ‚|d | jk�r|d dDk�r|dHk�rdI\}| _n|d | j| jfv �r(dJ}ndK|d › d.�}
t|
ƒ‚| jdLk�r¹d|d   k �rHdMk�sUn dN|d › d.�}
t|
ƒ‚|d }|||d  ƒ}dO}|d dk�rldPntt|d ƒƒ}t|ƒD ]\}}||| || d … }|t|ƒd k�r“dQ}�qx|�r¨|d dk�r¡dRndS| _| j}ndL| _t |dk�r´d9nd@|¡| _|d | j	d< |g}|dJk�rÓ| |d | jk¡ n| |d |d  dT d? dU@ ¡ | |d ¡ |dd|d |d	 f|�pü| j  ¡ t|ƒfg| _d1S )Vz Read relevant info about the BMPr   éÿÿÿÿ)Úheader_sizeÚ	directionr8   r"   r   Úwidthr   ÚheightÚplanesé   ÚbitsÚcompressionr/   Úpalette_padding)r#   r$   r%   r&   r'   r(   é   éÿ   Úy_flipr   r9   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>Údpi)Úr_maskÚg_maskÚb_maské0   r$   Úa_maské$   rP   rQ   rR   Úrgb_maskÚ	rgba_maskzUnsupported BMP header type (ú)é   )NNNzUnsupported BMP pixel depth (Úraw)©é  ÿ é ÿ  rB   r   ©ì      ~ r\   r]   r   ©r_   r]   rB   r   ©r_   r\   r]   rB   ©rB   r]   r\   r_   ©r\   r]   rB   r_   ©r_   r]   rB   r\   ©r   r   r   r   ©r\   r]   rB   ©i ø  ià  é   ©i |  ià  rh   )r   r   r   r   ÚXBGRÚBGXRÚABGRÚRGBAÚBGRAÚBGARr   zBGR;16r   ))r   r[   )r   r^   )r   r`   )r   ra   )r   rb   )r   rc   )r   rd   )r   re   )r   rf   )r   rg   )r   ri   r   ÚA)r   r   z Unsupported BMP bitfields layouté   )rn   rm   Úbmp_rlezUnsupported BMP compression (r   i   zUnsupported BMP Palette size (T©r   rB   FÚ1ÚLrh   éüÿÿÿ)ÚfpÚreadÚseekr)   r   Ú
_safe_readÚi16r1   ÚtupleÚinfor4   ÚlenÚappendÚ	enumerateÚOSErrorÚ_sizeÚgetÚBIT2MODEÚ_modeÚmoder2   r3   ÚlistÚranger   r   rZ   ÚpaletteÚtellÚtile)ÚselfÚheaderÚoffsetrx   ry   Ú	file_infoÚheader_dataÚmasksÚidxÚmaskÚmsgÚraw_modeÚdecoder_nameÚ	SUPPORTEDÚ
MASK_MODESÚpaddingr‰   Ú	grayscaleÚindicesÚindÚvalÚrgbÚargsr   r   r    Ú_bitmapK   s  

	ÿýþÿýü€
ÿ
ý 
ôõ
€ÿý€ÿ
"ü
ÿzBmpImageFile._bitmapr   ÚNonec                 C  s:   | j  d¡}t|ƒsd}t|ƒ‚t|dƒ}| j|d� dS )z-Open file, check magic number and read headerrY   zNot a BMP filerD   )rŽ   N)rw   rx   r!   ÚSyntaxErrorr)   r    )rŒ   Ú	head_datar”   rŽ   r   r   r    Ú_open  s   
zBmpImageFile._openN©r   r   ©r   r¡   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úformat_descriptionÚformatÚCOMPRESSIONSÚitemsÚkÚvÚvarsr    r¤   r   r   r   r    r,   ?   s    
 Ur,   c                   @  s   e Zd ZdZd	dd„ZdS )
ÚBmpRleDecoderTÚbufferr   r   ú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   é   r   ó    ru   r   r7   )r7   r   )ÚfdrŸ   Ú	bytearrayÚstateÚxsizeÚysizer~   rx   Úmaxr   rˆ   rŠ   ry   ÚosÚSEEK_CURr†   Ú
set_as_rawr   )rŒ   r³   Úrle4ÚdatarM   Údest_lengthÚpixelsÚbyteÚ
num_pixelsÚfirst_pixelÚsecond_pixelÚindexÚ
bytes_readÚrightÚupÚ
byte_countÚ	byte_readÚrawmoder   r   r    Údecode0  sr   


ü
ÿþÆ;zBmpRleDecoder.decodeN)r³   r   r   r´   )r§   r¨   r©   Ú	_pulls_fdrÏ   r   r   r   r    r²   -  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Ñ   y  s    rÑ   )rt   r   r   )ru   r   é   )r   r   rÓ   )r   r   r   )rn   r   r   )rt   ru   r   r   rm   ÚimúImage.Imagerw   ú	IO[bytes]Úfilenameústr | bytesr¡   c                 C  s   t | ||dƒ d S )NF)Ú_save)rÔ   rw   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 | |dd| j d||d ffg¡ d S )!Nzcannot write mode z as BMPrO   )é`   rÜ   c                 s  s    � | ]}t |d  d ƒV  qdS )rJ   g      à?N)ÚintrK   r   r   r    rN   ¡  s   € z_save.<locals>.<genexpr>r   rA   r   r/   rv   r#   r   rt   ó    c                 s  ó   � | ]	}t |ƒd  V  qdS ©r   Nr
   ©rL   Úir   r   r    rN   ¨  ó   € rs   ru   c                 s  rß   rà   r
   rá   r   r   r    rN   ª  rã   rÓ   r   r   r   r   rY   l   ÿÿ z)File size is too large for the BMP formatr   r¶   rZ   r¥   r7   )ÚSAVEr†   ÚKeyErrorr�   Úencoderinforƒ   r|   ÚsizeÚjoinrˆ   rÔ   Ú
getpaletter~   Ú
ValueErrorÚwriteÚo32Úo16r   rÙ   )rÔ   rw   r×   rÛ   rÎ   r>   rI   Úer”   r}   rO   ÚppmÚstrider�   Úimager‰   rŽ   Ú	file_sizer   r   r    rÙ   “  s~   
€þ


ÿþýÿÿþýüûú
ù
ø	÷
öÿ
(rÙ   z.bmpz	image/bmprr   z.dib)r   r   r   r   )rÔ   rÕ   rw   rÖ   r×   rØ   r   r¡   )T)
rÔ   rÕ   rw   rÖ   r×   rØ   rÛ   r   r   r¡   )#Ú
__future__r   r½   Útypingr   Ú r   r   r   Ú_binaryr   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>   sP   ù

 oLû
	ÿH