o
    h|?                     @   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   Z/var/www/html/magazine_api/magazine_env/lib/python3.10/site-packages/PIL/BmpImagePlugin.py_accept3   s   r   c                 C   s   t | dv S )N)   (   @   l   |   )i32r   r   r   r   _dib_accept7      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RLE8ZRLE4	BITFIELDSZJPEGZPNGc              	   C   s  | 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< |d.|d  krY|d dkrY|d|d  7 }t|d d/\| _}	| jd0u rttd1|d  d-d2}
|d | j
krg d3d4gd5d6gd7}d8d9d:d;d;d<d=d>d?}|d |v r|d d@kr|d+ ||d  v r||d |d+ f }	dA|	v rd:n| j| _nT|d dBv r|d* ||d  v r||d |d* f }	n7tdCtdC|d | jkr|d d@kr|dDkrdE\}	| _n|d | jkrdF}
n
tdG|d  d-| jdHkrd|d   k r+dIks6n tdJ|d  d-|d }|||d  }dK}|d dkrMdLntt|d }t|D ]\}}||| || d  }|t|d krtdM}qY|r|d dkrdNndO| _| j}	ndH| _t|dkrd8nd<|| _|d | j	d< |
dd|d |d	 f|p| j  |	|d |d  dP d? dQ@ |d ffg| _d0S )Rz Read relevant info about the BMPr   header_size	directionr   r   widthr   heightZplanes   bitscompressionr&   Zpalette_padding)r   r   r   r          Zy_flipr   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>x   s    z'BmpImageFile._bitmap.<locals>.<genexpr>dpi4   )r_maskg_maskb_maska_mask$   rC   )r@   rA   rB   r@   rA   rB   Zrgb_maskZ	rgba_maskzUnsupported BMP header type ()   )NNNzUnsupported BMP pixel depth (raw)      r4   r   rI   rJ   r4         ~ r4   rJ   rI   rL   r   r   r   r   rL   rI   rJ   r   rI   rJ   r4   i   i     i |  i  rR   )r   r   r   r   ZXBGRRGBABGRAr   zBGR;16r   ))r   rH   )r   rO   )r   rM   )r   rK   )r   rN   )r   rP   )r   rQ   )r   rS   r   A)r   r   z Unsupported BMP bitfields layout   )rU   rT   bmp_rlezUnsupported BMP compression (r   i   zUnsupported BMP Palette size (Tr   r4   F1LrR   )fpreadseekr!   r   
_safe_readi16r(   tupleinfor*   len	enumerateOSError_sizegetBIT2MODEmoder)   listranger   r   rG   palettetellZtile)selfheaderoffsetr^   r_   	file_infoZheader_dataidxmaskZraw_modeZdecoder_nameZ	SUPPORTEDZ
MASK_MODESpaddingrm   Z	greyscaleindicesindvalrgbr   r   r   _bitmapJ   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 headerrF   zNot a BMP filer5   )rq   N)r]   r^   r   SyntaxErrorr!   rz   )ro   Z	head_datarq   r   r   r   _open
  s
   
zBmpImageFile._openNr   r   )__name__
__module____qualname____doc__format_descriptionformatZCOMPRESSIONSitemskvvarsrz   r|   r   r   r   r   r$   >   s    
 Ar$   c                   @   s   e Zd ZdZdd ZdS )BmpRleDecoderTc           
      C   s  t  }d}t|| jj| jj k r| jd}| jd}|r!|s"n|d }|rD|| | jjkr9td| jj| }||| 7 }||7 }n|d dkret|| jj dkrb|d7 }t|| jj dksTd}nc|d dkrlnh|d dkr| jd}t|dk rnU| jd\}}	|d||	| jj   7 }t|| jj }n,| j|d }||7 }t||d k rn#||d 7 }| j d dkr| j	dt
j t|| jj| jj k s| t|dd| jd f dS )Nr   r       r   r   r,   )r,   r   )	bytearrayrd   stateZxsizeZysizefdr^   maxrn   r_   osSEEK_CURZ
set_as_rawbytesargs)
ro   bufferdatar<   ZpixelsbyteZ
num_pixelsZ
bytes_readrightupr   r   r   decode  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 ZdS )DibImageFileZDIBr%   c                 C   s   |    d S )N)rz   )ro   r   r   r   r|   R  r#   zDibImageFile._openN)r~   r   r   r   r   r|   r   r   r   r   r   M  s    r   )rZ   r   r   )r[   r      )r   r   r   )r   r   r   )rU   r   r   )rZ   r[   r   r   rT   c                 C   s   t | ||d d S )NF)_save)imr]   filenamer   r   r   	_dib_saved  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 BMPr>   )`   r   c                 S   s   t | d d S )Nr:   g      ?)int)r<   r   r   r   <lambda>s  s    z_save.<locals>.<lambda>r   r3   r   r&   r\   r   r   rF   r   l    z)File size is too large for the BMP formatr   r   rZ   rY   r[   r   r   r   r   rG   r}   r,   )SAVErj   KeyErrorrf   Zencoderinforh   rb   mapsize
ValueErrorwriteo32o16r   rl   r   Z
getpaletter   r   )r   r]   r   Zbitmap_headerrawmoder1   r9   erc   r>   ppmZstriderp   imagerq   	file_sizeir   r   r   r   h  sz   

	



(r   z.bmpz	image/bmprX   z.dib)T)r    r   r   r   _binaryr   ra   r   r!   r   r	   r   r
   r   ri   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>   sJ    Z6	
@