
    gH                    0   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d&dZd&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'd Z	 d(	 	 	 	 	 	 	 	 	 d)d!Z ej:                  ej<                  ee        ej>                  ej<                  e        ej@                  ej<                  d"        ejB                  ej<                  d#        ejD                  d$e        ej:                  ej<                  ee        ej>                  ej<                  e        ej@                  ej<                  d%        ejB                  ej<                  d#       y)*    )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                   c                    | d d dk(  S )N      BM prefixs    G/var/www/openai/venv/lib/python3.12/site-packages/PIL/BmpImagePlugin.py_acceptr    4   s    "1:    c                    t        |       dv S )N)   (   4   8   @   l   |   )i32r   s    r   _dib_acceptr+   8   s    v;888r!   c                  ~    e Zd ZdZdZdZdddddd	d
Zej                         D ]  \  ZZ	e	 e
       e<    ddZddZy)BmpImageFilez0Image plugin for the Windows Bitmap format (BMP)Windows BitmapBMPr   r   r      r      )RAWRLE8RLE4	BITFIELDSJPEGPNGc                H   | j                   j                  | j                   j                  }}|r ||       t         |d            dd}t	        j
                  | j                   |d   dz
        }|d   dk(  rRt        |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(  rg d"}t        |      d#k\  rNt        |      d$k\  r|j                  d%       nd|d%<   t        |      D ]  \  }}	t        |d&|dz  z         ||	<    n d|d%<   |D ]  }	t         |d            ||	<    |d'   |d(   |d)   f|d*<   |d'   |d(   |d)   |d%   f|d+<   nd,|d    d-}
t        |
      |d   |d	   f| _        |j!                  dd      r|d   nd|d   z  |d<   |d.|d   z   k(  r|d   dk  r|d|d   z  z  }t"        j!                  |d   d/      \  | _        }| j&                  d1|d    d-}
t        |
      d2}|d   | j                  k(  rg d3d4gd5d6gd7}d8d9d:d;d<d=d>d=d?d@dAdB}|d   |v ri|d   dCk(  r2|d+   ||d      v r%||d   |d+   f   }dD|v rd<n| j&                  | _        n|d   dEv r|d*   ||d      v r||d   |d*   f   }nxdF}
t        |
      dF}
t        |
      |d   | j                  k(  r|d   dCk(  rD|dGk(  r?dH\  }| _        n4|d   | j(                  | j*                  fv rdI}ndJ|d    d-}
t        |
      | j&                  dKk(  rd|d   cxk  rdLk  sn dM|d    d-}
t        |
      |d   } |||d   z        }dN}|d   dk(  rdOnt-        t/        |d               }t        |      D ]'  \  }}|||z  ||z  dz    }|t1        |      dz  k7  s&dP}) |r|d   dk(  rdQndR| _        | j&                  }n)dK| _        t3        j4                  |dk(  rd8nd?|      | _        |d   | j                  d<   |g}|dIk(  r"|j                  |d   | j*                  k(         n#|j                  |d   |d   z  dSz   dz	  dTz         |j                  |d          |dd|d   |d	   f|xs | j                   j9                         t        |      fg| _        y0)Uz Read relevant info about the BMPr   )header_size	directionr:   r#   r   widthr   heightplanes   bitscompressionr0   palette_padding)r$   r%   r&   r'   r(   r)         y_flipr   r;   l        r   
   r   	data_size   r   pixels_per_meter   colorsc              3  &   K   | ]	  }|d z    yw)o_C@Nr   .0xs     r   	<genexpr>z'BmpImageFile._bitmap.<locals>.<genexpr>}   s     $X:WQQ[:Ws   dpi)r_maskg_maskb_mask0   r%   a_mask$   rS   rT   rU   rgb_mask	rgba_maskzUnsupported BMP header type ()   )NNNzUnsupported BMP pixel depth (raw)      rD   r         ~ r_   r`   r   rb   r`   rD   r   rb   r_   r`   rD   rD   r`   r_   rb   r_   r`   rD   rb   rb   r`   rD   r_   r   r   r   r   r_   r`   rD   i   i     i |  i  rk   )r   r   r   r   XBGRBGXRABGRRGBABGRABGARr   zBGR;16r   ))r   r^   )r   ra   )r   rc   )r   rd   )r   re   )r   rf   )r   rg   )r   rh   )r   ri   )r   rj   )r   rl   r   A)r   r   z Unsupported BMP bitfields layout   )rq   rp   bmp_rlezUnsupported BMP compression (r   i   zUnsupported BMP Palette size (Tr   rD   F1Lrk   )fpreadseekr*   r   
_safe_readi16r2   tupleinfor5   lenappend	enumerateOSError_sizegetBIT2MODE_modemoder3   r4   listranger   r   r]   palettetelltile)selfheaderoffsetr{   r|   	file_infoheader_datamasksidxmaskmsgraw_modedecoder_name	SUPPORTED
MASK_MODESpaddingr   	grayscaleindicesindvalrgbargss                          r   _bitmapzBmpImageFile._bitmapK   s	   WW\\477<<dL$'QLrB	  **477Im4Lq4PQ
 ]#r)!$[!!4Ig"%k1"5Ih"%k1"5Ih #K 3If'+xxIm$+,I'( }%)CC"-a.D"8Ih*3H*=Q2Ik"!$[!!4Ig !* K#Sa00 h
 #&k1"5Ih #K 4If'*;';Im$%(b%9Ik"K$K$-I() #&k2"6Ih+,I'($$X)DV:W$XXDIIe'4>>96{#r);'2-X..1	(+%.u%5	T*-k2a<*H	$ &6 +.Ih' %*-d1g,	$ !& h'h'h')	*% h'h'h'h'	*	+& 2)M2J1K1MC#, w'8)<<

 }}Xq) hy(( 	(
 R)M222y7HA7Ma)H---F  (||If,=|L
H991)F2C1DAFC#, ]#t~~5	 ..*,ABI 6<;A7=<B<B<B<B,205-5-5J  I-f%+!+.)If<M2NN)9V+<i>T*UVH+.(?		DJf%1!*-9V;L1MM)9V+<i
>S*TUH<C!#,&8cl"}%1 B&6R<'5$$*}%$))TYY)??$L1)M2J1K1MC#, 99	(+4u46y7J6K1Mcl"#$56w8)<<= 	 !*a/ eIh$789  !*' 2HC!#-#-!2CDCbgk)$)	 !3 (1((;q(@cDJ#yyH!$DJ#/#3#3")Q,E7$DL
 $-]#;		- z9$KK	-0DII=>KK)G,y/@@2E!KPRSTIk*+ Ay)9X+>?($'',,.d	
	r!   c                    | j                   j                  d      }t        |      sd}t        |      t	        |d      }| j                  |       y)z-Open file, check magic number and read headerr\   zNot a BMP filerF   )r   N)rz   r{   r    SyntaxErrorr*   r   )r   	head_datar   r   s       r   _openzBmpImageFile._open  sH     GGLL$	y!"Cc""Y#F#r!   Nr   r   returnNone)__name__
__module____qualname____doc__format_descriptionformatCOMPRESSIONSitemskvvarsr   r   r   r!   r   r-   r-   ?   sU    : *F aAVWXL""$1q	 %R
h$r!   r-   c                      e Zd ZdZddZy)BmpRleDecoderTc                   | j                   J | j                  d   }t               }d}| j                  j                  | j                  j
                  z  }t        |      |k  r| j                   j                  d      }| j                   j                  d      }|r|sn~|d   }|r||z   | j                  j                  kD  r#t        d| j                  j                  |z
        }|rFt        |d   dz	        }	t        |d   dz        }
t        |      D ]  }|dz  dk(  r||	z  }||
z  } n|||z  z  }||z  }n|d   dk(  rTt        |      | j                  j                  z  dk7  r+|dz  }t        |      | j                  j                  z  dk7  r+d}nu|d   dk(  rn{|d   dk(  r| j                   j                  d      }t        |      dk  rnH| j                   j                  d      \  }}|d||| j                  j                  z  z   z  z  }t        |      | j                  j                  z  }n|rM|d   dz  }| j                   j                  |      }|D ]$  }|t        |dz	        z  }|t        |dz        z  }& n%|d   }| j                   j                  |      }||z  }t        |      |k  rnb||d   z  }| j                   j                         dz  dk7  r*| j                   j                  dt        j                         t        |      |k  r| j                  dk(  rdnd}| j!                  t#        |      |d| j                  d	   f       y
)Nr   r   r      r       rx   r   r9   )r9   r   )fdr   	bytearraystatexsizeysizer   r{   maxr   r   r   r|   osSEEK_CURr   
set_as_rawbytes)r   bufferrle4datarP   dest_lengthpixelsbyte
num_pixelsfirst_pixelsecond_pixelindex
bytes_readrightup
byte_count	byte_readrawmodes                     r   decodezBmpRleDecoder.decode0  s   ww"""yy|{jj&&)9)99$i+%WW\\!_F77<<?DJz>DJJ$4$44!$Q

(8(81(<!=J"$T!W\"2K#%d1gn#5L!&z!2 19> K/D L0D	 "3 D:--DZ7a<d)djj&6&66!; d)djj&6&66!;A!W\!W\!%aJ:* $QIE2GurDJJ4D4D/D'DEEDD	DJJ$4$44A %)!W\
%)WW\\*%=
)3I ByA~$66D By4'7$88D *4 &*!W
%)WW\\*%=

*:3aLA ww||~)Q.Q4u $i+%v c)#sdgq$))B-%@Ar!   N)r   r   r   ztuple[int, int])r   r   r   	_pulls_fdr   r   r!   r   r   r   -  s    ICr!   r   c                      e Zd ZdZdZddZy)DibImageFileDIBr.   c                $    | j                          y )N)r   )r   s    r   r   zDibImageFile._open}  s    r!   Nr   )r   r   r   r   r   r   r   r!   r   r   r   y  s    F)r!   r   )rw   r   r   )rx   r      )r   r   r   )r   r   r   )rq   r   r   )rw   rx   r   r   rp   c                     t        | ||d       y )NF)_save)imrz   filenames      r   	_dib_saver     s    	"b(E"r!   c           
     >   	 t         | j                     \  }}}| j                  }	|	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j                  d dD              }nm| j                  dk(  r"dj                  d t        d      D              }n<| j                  dk(  r+| j                  j                  dd      }t        |      dz  }nd }|rWd|z   |dz  z   }||z   }|dkD  rd}t        |      |j                  dt        |      z   t        d      z   t        |      z          |j                  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          |j                  d|dz
  z         |r|j                  |       t#        j$                  | |dd| j                  z   d||dffg       y # t        $ r!}d| j                   d}t        |      |d }~ww xY w) Nzcannot write mode z as BMPrR   )`   r   c              3  >   K   | ]  }t        |d z  dz           yw)rM   g      ?N)intrN   s     r   rQ   z_save.<locals>.<genexpr>  s     41AK#%&s   r   rC   r   r0   ry   r$   r   rw   r!   c              3  8   K   | ]  }t        |      d z    ywr   Nr   rO   is     r   rQ   z_save.<locals>.<genexpr>  s     7h2a519h   rv   rx   c              3  8   K   | ]  }t        |      d z    ywr   r   r   s     r   rQ   z_save.<locals>.<genexpr>  s     9j2a519jr   r   r   r   r   r   r\   l    z)File size is too large for the BMP formatr   r   r]   r   r9   )SAVEr   KeyErrorr   encoderinfor   r   sizejoinr   r   
getpaletter   
ValueErrorwriteo32o16r   r   )r   rz   r   bitmap_headerr   r@   rK   er   r   rR   ppmstrider   imager   r   	file_sizes                     r   r   r     s   " $RWWv
 >>D
((5(
#C 44
4CwwqzD 1$*Q.26FFRWWQZE	ww#~((7h77	C((9eCj99	C%%""5&1W" fvz)UN	y =CS/!
)n!f &k	
 HHF
bggaj/	
bggaj/	 a&	 d)		
 a&	 e*	 c!f+	 c!f+	 f+		 f+
	 HHUfrk"#
OOBeVbgg%5q7FB:OPQRw  ""277)73cl!"s   I2 2	J;JJz.bmpz	image/bmpru   z.dib)r   r   r   bool)r   Image.Imagerz   	IO[bytes]r   str | bytesr   r   )T)
r   r   rz   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   <module>r
     s  2 # 	  , , ! !  ! ! 9k$9&& k$\FI'' FX<  
		#
 RV@S@S"@S.9@SJN@S	@SP   L''w ?   L'' /   ,,f 5   L'' 5   y- 0   L''{ C   L'' 3   ,,f 5   L'' 5r!   