
    :h{M                    8   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d'dZd'dZ G d dej                        Z G d dej2                        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jB                  ej@                  e        ejD                  ej@                  d#        ejF                  ej@                  d$        ejH                  d%e        ej>                  ej@                  ee        ejB                  ej@                  e        ejD                  ej@                  d&        ejF                  ej@                  d$       y)+    )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                   Fc                $    | j                  d      S )N   BM)
startswithprefixs    P/var/www/urcfiles/bundle/venv/lib/python3.12/site-packages/PIL/BmpImagePlugin.py_acceptr    6   s    U##    c                    t        |       dv S )N)   (   4   8   @   l   |   )i32r   s    r   _dib_acceptr+   :   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dZddZy)BmpImageFilez0Image plugin for the Windows Bitmap format (BMP)Windows BitmapBMPr   r         r      )RAWRLE8RLE4	BITFIELDSJPEGPNGc                   | j                   j                  | j                   j                  }}|r ||       t         |d            dd}t	        |d   t
              sJ t        j                  | j                   |d   dz
        }|d   dk(  rUt        |d      |d<   t        |d      |d	<   t        |d      |d
<   t        |d      |d<   | j                  d   |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   t              sJ t        d! |d   D              | j                  d"<   |d   | j                  d#   k(  rg 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            ||	<    t	        |d)   t
              sJ t	        |d*   t
              sJ t	        |d+   t
              sJ t	        |d'   t
              sJ |d)   |d*   |d+   f|d,<   |d)   |d*   |d+   |d'   f|d-<   nd.|d    d/}
t        |
      t	        |d   t
              sJ t	        |d	   t
              sJ |d   |d	   f| _        t	        |d   t
              sJ |j#                  d d      r|d    nd|d   z  |d <   t	        |d    t
              sJ |d0|d   z   k(  r|d   dk  r|d|d    z  z  }t$        j#                  |d   d1      \  | _        }| j(                  sd2|d    d/}
t        |
      d3}|d   | j                  d#   k(  rg d4d5gd6d7gd8}d9d:d;d<d=d>d?d>d@dAdBdC}|d   |v r|d   dDk(  rG|d-   ||d      v r:t	        |d-   t              sJ ||d   |d-   f   }dE|v rd=n| j(                  | _        n|d   dFv r0|d,   ||d      v r#t	        |d,   t              sJ ||d   |d,   f   }ndG}
t        |
      dG}
t        |
      |d   | j                  d   k(  r|d   dDk(  rP|dHk(  st*        rEdI\  }| _        n:|d   | j                  dJ   | j                  dK   fv rdL}ndM|d    d/}
t        |
      | j(                  dNk(  rd|d    cxk  rdOk  sn dP|d     d/}
t        |
      t	        |d   t
              sJ |d   } |||d    z        }dQ}|d    dk(  rdRnt-        t/        |d                }t        |      D ]'  \  }}|||z  ||z  dz    }|t1        |      dz  k7  s&dS}) |r|d    dk(  rdTndU| _        | j(                  }n)dN| _        t3        j4                  |dk(  rd9nd@|      | _        |d   | j                  d<   |g}|dLk(  r%|j                  |d   | j                  dK   k(         n8t	        |d   t
              sJ |j                  |d   |d   z  dVz   dz	  dWz         |j                  |d          t        j8                  |dd|d   |d	   f|xs | j                   j;                         t        |            g| _        yX)Yz 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              3  &   K   | ]	  }|d z    yw)o_C@N .0xs     r   	<genexpr>z'BmpImageFile._bitmap.<locals>.<genexpr>   s     $X:WQQ[:Ws   dpir6   )r_maskg_maskb_mask0   r%   a_mask$   rU   rV   rW   rgb_mask	rgba_maskzUnsupported BMP header type ()   ) r_   zUnsupported BMP pixel depth (raw)      rE   r         ~ rb   rc   r   re   rc   rE   r   re   rb   rc   rE   rE   rc   rb   re   rb   rc   rE   re   re   rc   rE   rb   r   r   r   r   rb   rc   rE   i   i     i |  i  rn   )r   r   r   r   XBGRBGXRABGRRGBABGRABGARr   zBGR;16r   ))r   ra   )r   rd   )r   rf   )r   rg   )r   rh   )r   ri   )r   rj   )r   rk   )r   rl   )r   rm   )r   ro   r   A)r   r   z Unsupported BMP bitfields layout   )rt   rs   r4   r5   bmp_rlezUnsupported BMP compression (r   i   zUnsupported BMP Palette size (Tr   rE   F1Lrn   N)fpreadseekr*   
isinstanceintr   
_safe_readi16COMPRESSIONStupleinfolenappend	enumerateOSError_sizegetBIT2MODE_modemodeUSE_RAW_ALPHAlistranger   r	   r`   palette_Tile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._bitmapM   st   WW\\477<<dL tAw<>
	 )M2C888**477Im4Lq4PQ
 ]#r)!$[!!4Ig"%k1"5Ih"%k1"5Ih #K 3If'+'8'8'?Im$+,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'(i(:;UCCC$$X)DV:W$XXDIIe'4+<+<[+II6{#r);'2-X..1	(+%.u%5	T*-k2a<*H	$ &6 +.Ih' %*-d1g,	$ !&!)H"5s;;;!)H"5s;;;!)H"5s;;;!)H"5s;;;h'h'h')	*% h'h'h'h'	*	+& 2)M2J1K1MC#, )G,c222)H-s333w'8)<<
 )F+S111 }}Xq) hy(( 	(
 )H-s333R)M222y7HA7Ma)H---F  (||If,=xH
Hyy1)F2C1DAFC#, ]#t'8'8'EE	 ..*,AB;I 6<;A7=<B<B<B<B,205-5-5J  I-f%+!+.)If<M2NN%i&<eDDD)9V+<i>T*UVH+.(?		DJf%1!*-9V;L1MM%i
&;UCCC)9V+<i
>S*TUH<C!#,&8cl"}%):):5)AA B&"'5$$*}%f%f%*
 
 %L1)M2J1K1MC#, 99	(+4u46y7J6K1Mcl"!),=">DDD#$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
 $-]#;		- #*9$KK	-0D4E4Ef4MMNi0#666KK)G,y/@@2E!KPRSTIk*+OO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 filerG   )r   N)r}   r~   r    SyntaxErrorr*   r   )r   	head_datar   r   s       r   _openzBmpImageFile._open7  sH     GGLL$	y!"Cc""Y#F#r!   Nr   r   )r   r   r   r   returnNoner   r   )__name__
__module____qualname____doc__format_descriptionformatr   itemskvvarsr   r   rO   r!   r   r-   r-   A   sU    : *F aAVWXL""$1q	 %h
T$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      r0       r{   r   r:   )r:   r   )fdr   	bytearraystatexsizeysizer   r~   maxr   r   r   r   osSEEK_CURr   
set_as_rawbytes)r   bufferrle4datarR   dest_lengthpixelsbyte
num_pixelsfirst_pixelsecond_pixelindex
bytes_readrightup
byte_count	byte_readrawmodes                     r   decodezBmpRleDecoder.decodeH  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Wq$))B-.@Ar!   N)r   z$bytes | Image.SupportsArrayInterfacer   ztuple[int, int])r   r   r   	_pulls_fdr   rO   r!   r   r   r   E  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   rO   r!   r   r   r     s    F)r!   r   )rz   r   r0   )r{   r      )r   r   r   )r   r   r   )rt   r   r   )rz   r{   r   r   rs   c                     t        | ||d       y )NF)_save)imr}   filenames      r   	_dib_saver     s    	"b(E"r!   c                b   	 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$                  | |t#        j&                  dd| j                  z   d||df      g       y # t        $ r!}d| j                   d}t        |      |d }~ww xY w) Nzcannot write mode z as BMPrT   )`   r   c              3  >   K   | ]  }t        |d z  dz           yw)rN   g      ?N)r   rP   s     r   rS   z_save.<locals>.<genexpr>  s     41AK#%&s   r   rD   r   r1   r|   r$   r   rz   r!   c              3  8   K   | ]  }t        |      d z    ywr   Nr   rQ   is     r   rS   z_save.<locals>.<genexpr>  s     7h2a519h   ry   r{   c              3  8   K   | ]  }t        |      d z    ywr   r   r   s     r   rS   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   r:   )SAVEr   KeyErrorr   encoderinfor   r   sizejoinr   r   
getpaletter   
ValueErrorwriteo32o16r   r   r   )r   r}   r   bitmap_headerr   rA   rL   er   r   rT   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"#
OO
B(8!gvr=RSTw  ""277)73cl!"s   J 	J.J))J.z.bmpz	image/bmprx   z.dib)r   r   r   bool)r   Image.Imager}   	IO[bytes]r   str | bytesr   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_decoderrO   r!   r   <module>r     s  2 # 	  , , ! !  ! !  $9A$9&& A$HFI'' FX<  
		#
 RVBB"B.9BJNB	BT   L''w ?   L'' /   ,,f 5   L'' 5   y- 0   L''{ C   L'' 3   ,,f 5   L'' 5r!   