
    Rf#E                       d dl mZ 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 Zd Z G d dej                  Z G d dej                  Z G d de          ZddddddZd Zd&d!Z ej        ej        ee            ej        ej        e            ej        ej        d"            ej        ej        d#            ej         d$e            ej        ej        ee            ej        ej        e            ej        ej        d%            ej        ej        d#           dS )'    )annotationsN   )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                    | d d         dk    S )N      BM prefixs    D/var/www/html/env/lib/python3.11/site-packages/PIL/BmpImagePlugin.py_acceptr   3   s    "1":    c                $    t          |           dv S )N)   (   @   l   |   )i32r   s    r   _dib_acceptr(   7   s    v;;000r    c                      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<   ddZd ZdS )BmpImageFilez0Image plugin for the Windows Bitmap format (BMP)Windows BitmapBMPr   r   r      r      )RAWRLE8RLE4	BITFIELDSJPEGPNGc           
        | j         j        | j         j        }}|r ||           t           |d                    dd}t	          j        | j         |d         dz
            }|d         dk    r]t          |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         rdnd|d<   t          |d          |d<   |d         st          |d          ndt          |d          z
  |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                       | j	        d!<   |d         | j
        k    rt          |          d"k    r1t          g d#          D ]\  }}t          |d$|dz  z             ||<   n%d|d%<   d&D ]}t           |d                    ||<   |d'         |d(         |d)         f|d*<   |d'         |d(         |d)         |d%         f|d+<   nd,|d          d-}	t          |	          |d         |d	         f| _        |                    dd          r|d         n
d|d         z  |d<   |d.|d         z   k    r|d         dk    r|d|d         z  z  }t                               |d         d/          \  | _        }
| j        d1|d          d-}	t          |	          d2}|d         | j
        k    rg d3d4gd5d6gd7}d8d9d:d;d<d<d=d>d?d@	}|d         |v r|d         dAk    r?|d+         ||d                  v r)||d         |d+         f         }
dB|
v rd;n| j        | _        n|d         dCv r-|d*         ||d                  v r||d         |d*         f         }
ndD}	t          |	          dD}	t          |	          |d         | j        k    r|d         dAk    r|dEk    r
dF\  }
| _        n4|d         | j        | j        fv rdG}ndH|d          d-}	t          |	          | j        dIk    rd|d         cxk     rdJk    sn dK|d          d-}	t          |	          |d         } |||d         z            }dL}|d         dk    rdMn!t+          t-          |d                             }t          |          D ]0\  }}|||z  ||z  dz            }|t/          |          dz  k    rdN}1|r|d         dk    rdOndP| _        | j        }
n)dI| _        t1          j        |dk    rd8nd=|          | _        |d         | j	        d<   |
g}|dGk    r%|                    |d         | j        k               n-|                    |d         |d         z  dQz   dz	  dRz             |                    |d                    |dd|d         |d	         f|p| j                                         t          |          fg| _        d0S )Sz Read relevant info about the BMPr   )header_size	directionr7   r"   r   widthr   heightplanes   bitscompressionr-   palette_padding)r#   r$   r%   r&         y_flipr   r8   l        r   
   r   	data_size   r   pixels_per_meter   colorsc              3      K   | ]	}|d z  V  
dS )o_C@Nr   .0xs     r   	<genexpr>z'BmpImageFile._bitmap.<locals>.<genexpr>v   s&      $X$XQQ[$X$X$X$X$X$Xr    dpi4   )r_maskg_maskb_maska_mask$   rT   )rQ   rR   rS   rQ   rR   rS   rgb_mask	rgba_maskzUnsupported BMP header type ()   )NNNzUnsupported BMP pixel depth (raw)      rA   r         ~ r\   r]   r   r_   r\   r]   rA   rA   r]   r\   r_   r\   r]   rA   r_   r   r   r   r   r\   r]   rA   i   i     i |  i  rf   )r   r   r   r   XBGRABGRRGBABGRAr   zBGR;16r   )	)r   r[   )r   r^   )r   r`   )r   ra   )r   rb   )r   rc   )r   rd   )r   re   )r   rg   r   A)r   r   z Unsupported BMP bitfields layout   )rk   rj   bmp_rlezUnsupported BMP compression (r   i   zUnsupported BMP Palette size (Tr   rA   F1Lrf   )fpreadseekr'   r   
_safe_readi16r/   tupleinfor2   len	enumerateOSError_sizegetBIT2MODE_modemoder0   r1   listranger   r   rZ   paletteappendtelltile)selfheaderoffsetrt   ru   	file_infoheader_dataidxmaskmsgraw_modedecoder_name	SUPPORTED
MASK_MODESpaddingr   	grayscaleindicesindvalrgbargss                         r   _bitmapzBmpImageFile._bitmapJ   s   W\47<d 	DLLL$'QLLrBB	  *47Im4Lq4PQQ ]#r))!$[!!4!4Ig"%k1"5"5Ih"%k1"5"5Ih #K 3 3If'+xIm$+,I'(( }%);;;"-a.D"8Ih*3H*=%EQQ2Ik"!$[!!4!4Ig !*1K###Sa000 h
 #&k1"5"5Ih #K 4 4If'*;';';Im$%(b%9%9Ik"K$$K$$-I() #&k2"6"6Ih+,I'($$X$X)DV:W$X$X$XXXDIe'4>99{##r))%.@@@& & I I	T +.k2a<*H*H	$I +.Ih' > 7 7*-dd1gg,,	$h'h'h')	*% h'h'h'h'	*	+& N)M2JMMMC#,, w'8)<<

 }}Xq))*Ihy(( 	(
 R)M2222y7HA7M7Ma)H---F  (||If,=|LL
H9F)F2CFFFC#,, ]#t~55   ..*,AB I 6<;A<B<B<B,205-5-5
 
J  I--f%++!+.)If<M2NNN)9V+<i>T*UVH+.(??	DJJf%11!*-9V;L1MMM)9V+<i
>S*TUHH<C!#,,&8cll"}%11 B&&6R<<'5$$*}%$)TY)???$LLM)M2JMMMC#,, 9	(+4444u4444My7JMMMcll"#$56$w8)<<== 	 !*a// HeIh$78899  !*' 2 2 * *HC!#-#-!2C"CDCbggk))$)	  (1((;q(@(@cDJ#yHH!$DJ#/#3")Q,,E7$ $DL
 $-]#;	- z9$$KK	-0DI=>>>>KK)G,y/@@2E!KPRSTTTIk*+++ Ay)9X+>?($',,..d	
			r    c                    | j                             d          }t          |          sd}t          |          t	          |d          }|                     |           dS )z-Open file, check magic number and read headerrY   zNot a BMP filerC   )r   N)rs   rt   r   SyntaxErrorr'   r   )r   	head_datar   r   s       r   _openzBmpImageFile._open  sc     GLL$$	y!! 	#"Cc"""Y##F#####r    Nr   r   )__name__
__module____qualname____doc__format_descriptionformatCOMPRESSIONSitemskvvarsr   r   r   r    r   r*   r*   >   s        :: *F aAVWXXL""$$  1q		E
 E
 E
 E
N$ $ $ $ $r    r*   c                      e Zd ZdZd ZdS )BmpRleDecoderTc                   | j         d         }t                      }d}t          |          | j        j        | j        j        z  k     r| j                            d          }| j                            d          }|r|sn|d         }|r||z   | j        j        k    rt          d| j        j        |z
            }|rWt          |d         dz	            }t          |d         dz            }	t          |          D ]}
|
dz  dk    r||z  }||	z  }n|||z  z  }||z  }n|d         dk    rIt          |          | j        j        z  dk    r%|dz  }t          |          | j        j        z  dk    %d}n}|d         dk    rn|d         dk    r| j                            d          }t          |          dk     rn_| j                            d          \  }}|d||| j        j        z  z   z  z  }t          |          | j        j        z  }n|rU|d         dz  }| j                            |          }|D ],}|t          |dz	            z  }|t          |dz            z  }-n'|d         }| j                            |          }||z  }t          |          |k     rn{||d         z  }| j                                        dz  dk    r%| j                            dt          j                   t          |          | j        j        | j        j        z  k     | j        dk    rdnd}|                     t#          |          |d| j         d	         f           d
S )Nr   r   r      r       rq   r   r6   )r6   r   )r   	bytearrayrz   statexsizeysizefdrt   maxr   r   r   ru   osSEEK_CURr   
set_as_rawbytes)r   bufferrle4datarM   pixelsbyte
num_pixelsfirst_pixelsecond_pixelindex
bytes_readrightup
byte_count	byte_readrawmodes                    r   decodezBmpRleDecoder.decode"  sn   y|{{$ii$**TZ-====W\\!__F7<<??D  J 45z>DJ$444!$Q
(81(<!=!=J 	."$T!W\"2"2K#%d1gn#5#5L!&z!2!2 1 1 19>> K/DD L0DD	1 D:--DZ7a<<d))dj&66!;; d))dj&66!;;AA!W\\!W\\!%aJ:** $QIE2GurDJ4D/D'DEEDD		DJ$44AA  
+%)!W\
%)W\\*%=%=
)3 9 9I ByA~$6$66D By4'7$8$88DD9 &*!W
%)W\\*%=%=

*:33aLA w||~~)Q..Q444u $ii$**TZ-====v c))##sdgq$)B-%@AAAur    N)r   r   r   	_pulls_fdr   r   r    r   r   r     s-        IA A A A Ar    r   c                      e Zd ZdZdZd ZdS )DibImageFileDIBr+   c                .    |                                   d S )N)r   )r   s    r   r   zDibImageFile._openm  s    r    N)r   r   r   r   r   r   r   r    r   r   r   i  s.        F)    r    r   )rp   r   r   )rq   r      )r   r   r   )r   r   r   )rk   r   r   )rp   rq   r   r   rj   c                *    t          | ||d           d S )NF)_save)imrs   filenames      r   	_dib_saver     s    	"b(E"""""r    Tc           
        	 t           | j                 \  }}}n-# t          $ r }d| j         d}t          |          |d }~ww xY w| j        }	|	                    dd          }
t          d |
D                       }| j        d         |z  dz   dz  d	z   d
z  }d}|| j        d         z  }| j        dk    r d                    d dD                       }ns| j        dk    r-d                    d t          d          D                       }n;| j        dk    r.| j
                            dd          }t          |          dz  }nd }|rld|z   |dz  z   }||z   }|dk    rd}t          |          |                    dt          |          z   t          d          z   t          |          z              |                    t          |          t          | j        d                   z   t          | j        d                   z   t!          d          z   t!          |          z   t          d          z   t          |          z   t          |d                   z   t          |d                   z   t          |          z   t          |          z              |                    d|dz
  z             |r|                    |           t#          j        | |dd| j        z   d||dffg           d S ) Nzcannot write mode z as BMPrO   )`   r   c              3  @   K   | ]}t          |d z  dz             V  dS )rJ   g      ?N)intrK   s     r   rN   z_save.<locals>.<genexpr>  s3      441AK#%&&444444r    r   r@   r   r-   rr   r#   r   rp   r    c              3  :   K   | ]}t          |          d z  V  dS r   Nr
   rL   is     r   rN   z_save.<locals>.<genexpr>  s,      772a5519777777r    ro   rq   c              3  :   K   | ]}t          |          d z  V  dS r   r
   r   s     r   rN   z_save.<locals>.<genexpr>  s,      992a5519999999r    r   r   r   r   r   rY   l    z)File size is too large for the BMP formatr   r   rZ   r   r6   )SAVEr   KeyErrorr|   encoderinfor~   rx   sizejoinr   r   
getpaletterz   
ValueErrorwriteo32o16r   r   )r   rs   r   bitmap_headerr   r=   rH   er   ry   rO   ppmstrider   imager   r   	file_sizes                     r   r   r     s(   " $RWvv " " "327333cll!" >D
((5(
#
#C 44444
4
4CwqzD 1$*Q.26FFRWQZE	w#~~((77h77777	C((99eCjj99999	C%""5&11W"  
fvz)UN	y  =CS//!
)nn!ff &kk	
 	
 	
 HHF
bgaj//	
bgaj//	 a&&	 d))		
 a&&	 e**	 c!f++	 c!f++	 f++		 f++
	   HHUfrk"### 
OBeVbg%5q7FB:OPQRRRRRs    
A>Az.bmpz	image/bmprn   z.dib)T)!
__future__r   r    r   r   r   _binaryr   rw   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   <module>r      s  2 # " " " " " 				 , , , , , , , , , , ! ! ! ! ! ! ! ! ! ! ! !       ! ! ! ! ! ! ! ! ! ! ! !    1 1 1^$ ^$ ^$ ^$ ^$9& ^$ ^$ ^$BD D D D DI' D D DT    <    
		 # # #>S >S >S >SL  L'w ? ? ?  L' / / /  ,f 5 5 5  L' 5 5 5  y- 0 0 0  L'{ C C C  L' 3 3 3  ,f 5 5 5  L' 5 5 5 5 5r    