o
    \"<f%7                     @   s.  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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ejee eeje eejd# eejd" d$S )&   )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   I/var/www/html/kck/venv/lib/python3.10/site-packages/PIL/BmpImagePlugin.py_accept1   s   r   c                 C   s   t | dv S )N)   (   @   l   |   )i32r   r   r   r   _dib_accept5      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BMP    r   r      r      )RAWRLE8RLE4	BITFIELDSJPEGPNGc              	   C   sJ  | j j| j j}}|r|| i }t|d|d< d|d< t| j |d d }|d dkrTt|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 rid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rt|d"krtg d#D ]\}}t|d$|d  ||< qnd|d%< d&D ]
}t|d||< q|d' |d( |d) f|d*< |d' |d( |d) |d% f|d+< n
td,|d  d-|d |d	 f| _|ddr9|d nd|d > |d< t|d d.\| _}	| jd/u r\td0|d  d-|d | j
krg d1d2gd3d4gd5}
d6d7d8d9d9d:d;d<d=}|d |
v r|d d>kr|d+ |
|d  v r||d |d+ f }	d?|	v rd8n| j| _nI|d d@v r|d* |
|d  v r||d |d* f }	n,tdAtdA|d | jkr|d d>kr|dBkrdC\}	| _n
tdD|d  d-| jdEkrud|d   k rdFksn tdG|d  d-|d }|||d  }dH}|d dkr(dIntt|d }t|D ]\}}||| || d  }|t|d krOdJ}q4|rd|d dkr]dKndL| _| j}	ndE| _t|dkrpd6nd:|| _|d | j	d< dMdd|d |d	 f|p| j  |	|d |d  dN d? dO@ |d ffg| _d/S )Pz Read relevant info about the BMPr   header_size	directionr   r&   widthr   heightplanes   bitscompressionr'   palette_padding)r   r   r   r         y_flipr   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>dpi4   )r_maskg_maskb_maska_mask$   rK   )rH   rI   rJ   rH   rI   rJ   rgb_mask	rgba_maskzUnsupported BMP header type ())NNNzUnsupported BMP pixel depth ()      r:   r&   rQ   rR   r:         ~ r:   rR   rQ   rT   r&   r&   r&   r&   rT   rQ   rR   r&   rQ   rR   r:   i   i     i |  i  rZ   )r   r   r   r   XBGRRGBABGRAr   zBGR;16r   ))r   rP   )r   rW   )r   rU   )r   rS   )r   rV   )r   rX   )r   rY   )r   r[   r   A)r   r   z Unsupported BMP bitfields layout   )r^   r]   zUnsupported BMP compression (r
   i   zUnsupported BMP Palette size (Tr&   r:   F1LrawrZ   )fpreadseekr    r   
_safe_readi16r)   tupleinfor,   len	enumerateOSError_sizegetBIT2MODEmodelistranger   r   rd   palettetelltile)selfheaderoffsetrg   rh   	file_infoheader_dataidxmaskraw_mode	SUPPORTED
MASK_MODESpaddingrv   	greyscaleindicesindvalrgbr   r   r   _bitmapH   s   






zBmpImageFile._bitmapc                 C   s6   | j d}t|stdt|d}| j|d dS )z-Open file, check magic number and read header   zNot a BMP filer<   )r{   N)rf   rg   r   SyntaxErrorr    r   )ry   	head_datar{   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    
 <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   )ry   r   r   r   r     r"   zDibImageFile._openN)r   r   r   r   r   r   r   r   r   r   r     s    r   )rb   r   r   )rc   r      )r
   r   r   )r   r   r&   )r^   r   r&   )rb   rc   r
   r   r]   c                 C   s   t | ||d d S )NF)_save)imrf   filenamer   r   r   	_dib_save*  s   r   Tc              
   C   s  z
t | j \}}}W n ty  } z
td| j d|d }~ww | j}|dd}	ttdd |	}
| jd | d d	 d
 d@ }d}|| jd  }|rrd| |d  }|| }|dkrat	d|
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   | jdkrdD ]}|
t|d  qn%| jdkrtdD ]}|
t|d  qn| jdkr|
| jdd t| |dd| j d||dffg d S )Nzcannot write mode z as BMPrF   )`   r   c                 S   s   t | d d S )NrB   g      ?)int)rD   r   r   r   <lambda>9  s    z_save.<locals>.<lambda>r&   r9   r   r'   re   r   r   r   r   l    z)File size is too large for the BMP formatr       rb   ra   rc   r   r
   r   r   rd   r   r0   )SAVErs   KeyErrorro   encoderinforq   rk   mapsize
ValueErrorwriteo32o16r   ru   r   
getpaletter   r   )r   rf   r   bitmap_headerrawmoder6   rA   erl   rF   ppmstriderz   imager{   	file_sizeir   r   r   r   .  sz   

	



(r   z.bmpz	image/bmpz.dibN)T) r   r   r   _binaryr   rj   r   r    r   r   r   r	   r   rr   r   r!   r#   r   r   r   r   register_openr   register_saveregister_extensionregister_mimer   r   r   r   <module>   sD    X	
@