
    Bwg.M                    4   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&dZd&dZ G d dej                        Z G d dej0                        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jB                  ej>                  d"        ejD                  ej>                  d#        ejF                  d$e        ej<                  ej>                  ee        ej@                  ej>                  e        ejB                  ej>                  d%        ejD                  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                   c                    | d d dk(  S )N      BM prefixs    I/var/www/horilla/myenv/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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                   | 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(  rJ|dHk(  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    }|t/        |      dz  k7  s&dS}) |r|d    dk(  rdTndU| _        | j(                  }n)dN| _        t1        j2                  |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        j6                  |dd|d   |d	   f|xs | j                   j9                         t        |            g| _        yX)Yz Read relevant info about the BMPr   )header_size	directionr;   r$   r   widthr   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@Nr   .0xs     r    	<genexpr>z'BmpImageFile._bitmap.<locals>.<genexpr>   s     $XQQ[$Xs   dpir6   )r_maskg_maskb_mask0   r&   a_mask$   rT   rU   rV   rgb_mask	rgba_maskzUnsupported BMP header type ()   ) r^   zUnsupported BMP pixel depth (raw)      rE   r         ~ ra   rb   r   rd   rb   rE   r   rd   ra   rb   rE   rE   rb   ra   rd   ra   rb   rE   rd   rd   rb   rE   ra   r   r   r   r   ra   rb   rE   i   i     i |  i  rm   )r   r   r   r   XBGRBGXRABGRRGBABGRABGARr   zBGR;16r   ))r   r`   )r   rc   )r   re   )r   rf   )r   rg   )r   rh   )r   ri   )r   rj   )r   rk   )r   rl   )r   rn   r   A)r   r   z Unsupported BMP bitfields layout   )rs   rr   r4   r5   bmp_rlezUnsupported BMP compression (r   i   zUnsupported BMP Palette size (Tr   rE   F1Lrm   N)fpreadseekr+   
isinstanceintr   
_safe_readi16COMPRESSIONStupleinfolenappend	enumerateOSError_sizegetBIT2MODE_modemode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._bitmapK   s   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 I	T*-k2a<*H	$I +.Ih' % 7*-d1g,	$7!)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&6R<'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  !*' 2 *HC!#-#-!2CDCbgk)$)	* (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._open3  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   r   r"   r    r.   r.   ?   sZ    : *F aAVWXL""$ 1q	f
P$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       rz   r   r:   )r:   r   )fdr   	bytearraystatexsizeysizer   r}   maxr   r   r   r~   osSEEK_CURr   
set_as_rawbytes)r   bufferrle4datarQ   dest_lengthpixelsbyte
num_pixelsfirst_pixelsecond_pixelindex
bytes_readrightup
byte_count	byte_readrawmodes                     r    decodezBmpRleDecoder.decodeD  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 1 19> K/D L0D	1 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\\*%=
)3 9I ByA~$66D By4'7$88D9 &*!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   r   r"   r    r   r   A  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     s    F)r"   r   )ry   r   r   )rz   r      )r   r   r   )r   r   r   )rs   r   r   )ry   rz   r   r   rr   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 BMPrS   )`   r   c              3  >   K   | ]  }t        |d z  dz           yw)rN   g      ?N)r   rO   s     r    rR   z_save.<locals>.<genexpr>  s     41AK#%&4s   r   rD   r   r1   r{   r%   r   ry   r"   c              3  8   K   | ]  }t        |      d z    ywr   Nr   rP   is     r    rR   z_save.<locals>.<genexpr>  s     72a5197   rx   rz   c              3  8   K   | ]  }t        |      d z    ywr   r   r   s     r    rR   z_save.<locals>.<genexpr>  s     92a5199r   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   rS   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/bmprw   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.   	PyDecoderr   r   r   r   r   register_openr   register_saveregister_extensionregister_mimeregister_decoderr   r"   r    <module>r     s  2 # 	  , , ! !  ! ! 9$9&& $D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"   