o
    'j6h{M                     @  s~  d dl mZ d dlZd dlmZ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Zd8ddZd8d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d9d.d/Z	0d:d;d2d3Zeej ee e!ej e e"ej d4 e#ej d5 e$d6e eej ee e!ej e e"ej d7 e#ej d5 dS )<    )annotationsN)IOAny   )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                   Fprefixbytesreturnboolc                 C  s
   |  dS )N   BM)
startswithr    r    a/var/www/html/chefvision.cloud.itp360.com/venv/lib/python3.10/site-packages/PIL/BmpImagePlugin.py_accept6   s   
r"   c                 C  s   t | dv S )N)   (   4   8   @   l   |   )i32r   r    r    r!   _dib_accept:      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dZdddZdS )BmpImageFilez0Image plugin for the Windows Bitmap format (BMP)Windows BitmapBMPr   r         r      )RAWRLE8RLE4	BITFIELDSJPEGPNGheaderintoffsetr   Nonec                 C  sH  | j j| j j}}|r|| t|ddd}t|d ts!J t| j |d d }|d dkr[t|d|d< t|d|d	< t|d|d
< t|d|d< | j	d |d< d|d< n|d dv rj|d dk|d< |d rpdnd|d< t|d|d< |d st|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 t
sJ t
d!d" |d D | jd#< |d | j	d$ krig 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t|d* ts.J t|d+ ts8J t|d, tsBJ t|d( tsLJ |d* |d+ |d, f|d-< |d* |d+ |d, |d( f|d.< nd/|d  d0}
t|
t|d tsJ t|d	 tsJ |d |d	 f| _t|d tsJ |d dr|d  nd|d > |d < t|d  tsJ |d1|d  kr|d dkr|d|d   7 }t|d d2\| _}| jsd3|d  d0}
t|
d4}|d | j	d$ kr~g d5d6gd7d8gd9}d:d;d<d=d>d?d@d?dAdBdCdD}|d |v rx|d dEkrK|d. ||d  v rKt|d. t
s5J ||d |d. f }dF|v rFd>n| j| _np|d dGv rr|d- ||d  v rrt|d- t
sgJ ||d |d- f }nIdH}
t|
dH}
t|
|d | j	d kr|d dEkr|dIkstrdJ\}| _n|d | j	dK | j	dL fv rdM}ndN|d  d0}
t|
| jdOkrJd|d    k rdPksn dQ|d   d0}
t|
t|d tsJ |d }|||d   }dR}|d  dkrdSntt|d  }t|D ]\}}||| || d  }|t|d kr$dT}q	|r9|d  dkr2dUndV| _| j}ndO| _t|dkrEd:ndA|| _|d | jd< |g}|dMkrf||d | j	dL k nt|d tspJ ||d |d  dW d? dX@  ||d  t|dd|d |d	 f|p| j  t
|g| _dYS )Zz Read relevant info about the BMPr   )header_size	directionr>   r#   r   widthr0   heightplanes   bitsr3   compressionr1   palette_padding)r$   r%   r&   r'   r(   r)         y_flipr   r?   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>dpir6   )r_maskg_maskb_mask0   r%   a_mask$   rV   rW   rX   rgb_mask	rgba_maskzUnsupported BMP header type ()   ) r`   zUnsupported BMP pixel depth (raw)      rH   r         ~ rc   rd   r   rf   rd   rH   r   rf   rc   rd   rH   rH   rd   rc   rf   rc   rd   rH   rf   rf   rd   rH   rc   r   r   r   r   rc   rd   rH   i   i     i |  i  ro   )r   r   r   r   XBGRBGXRABGRRGBABGRABGARr   zBGR;16r   ))r   rb   )r   re   )r   rg   )r   rh   )r   ri   )r   rj   )r   rk   )r   rl   )r   rm   )r   rn   )r   rp   r   A)r   r   z Unsupported BMP bitfields layout   )ru   rt   r4   r5   bmp_rlezUnsupported BMP compression (r   i   zUnsupported BMP Palette size (Tr   rH   F1Lro   N)fpreadseekr*   
isinstancer:   r   
_safe_readi16COMPRESSIONStupleinfolenappend	enumerateOSError_sizegetBIT2MODE_modemodeUSE_RAW_ALPHAlistranger   r   ra   palette_Tiletelltile)selfr9   r;   r   r   	file_infoheader_datamasksidxmaskmsgraw_modedecoder_name	SUPPORTED
MASK_MODESpaddingr   	grayscaleindicesindvalrgbargsr    r    r!   _bitmapM   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 headerr_   zNot a BMP filerJ   )r;   N)r~   r   r"   SyntaxErrorr*   r   )r   	head_datar   r;   r    r    r!   _open7  s   
zBmpImageFile._openNr   r   )r9   r:   r;   r:   r   r<   r   r<   )__name__
__module____qualname____doc__format_descriptionformatr   itemskvvarsr   r   r    r    r    r!   r-   A   s     kr-   c                   @  s   e Zd ZdZd	ddZdS )
BmpRleDecoderTbuffer$bytes | Image.SupportsArrayInterfacer   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rt|| jj dkr|d7 }t|| jj dksd}n|d dkrn|d dkr| j d}t|dk rnu| j d\}}|d||| jj   7 }t|| jj }nR|r|d d }| j |}|D ]}|t	|d? 7 }|t	|d@ 7 }qn|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      r0       r|   r   r=   )r=   r   )fdr   	bytearraystatexsizeysizer   r   maxr   r   r   r   osSEEK_CURr   
set_as_rawr   )r   r   rle4datarS   dest_lengthpixelsbyte
num_pixelsfirst_pixelsecond_pixelindex
bytes_readrightup
byte_count	byte_readrawmoder    r    r!   decodeH  sr   



;zBmpRleDecoder.decodeN)r   r   r   r   )r   r   r   	_pulls_fdr   r    r    r    r!   r   E  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     s    r   )r{   r   r0   )r|   r      )r   r   r   )r   r   r   )ru   r   r   )r{   r|   r   r   rt   imImage.Imager~   	IO[bytes]filenamestr | bytesr<   c                 C  s   t | ||d d S )NF)_save)r   r~   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 }|rd| |d  }|| }|dkrd}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| |tdd| j d||d fg d S )!Nzcannot write mode z as BMPrU   )`   r   c                 s  s     | ]}t |d  d V  qdS )rP   g      ?N)r:   rQ   r    r    r!   rT     s    z_save.<locals>.<genexpr>r   rG   r   r1   r}   r$   r   r{       c                 s      | ]	}t |d  V  qdS r   Nr   rR   ir    r    r!   rT         rz   r|   c                 s  r   r   r   r   r    r    r!   rT     r   r   r   r   r   r   r_   l    z)File size is too large for the BMP formatr   r   ra   r   r=   )SAVEr   KeyErrorr   encoderinfor   r   sizejoinr   r   
getpaletter   
ValueErrorwriteo32o16r   r   r   )r   r~   r   r   r   rD   rO   er   r   rU   ppmstrider9   imager   r;   	file_sizer    r    r!   r     s   





	

 r   z.bmpz	image/bmpry   z.dib)r   r   r   r   )r   r   r~   r   r   r   r   r<   )T)
r   r   r~   r   r   r   r   r   r   r<   )%
__future__r   r   typingr   r   r`   r   r   r   _binaryr	   r   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>   sT   


  L
	J