
    zvg.M                       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d3dZd3d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d4d+Z	 d5d6d.Z ej        ej        ee            ej         ej        e            ej!        ej        d/            ej"        ej        d0            ej#        d1e            ej        ej        ee            ej         ej        e            ej!        ej        d2            ej"        ej        d0           dS )7    )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                   prefixbytesreturnboolc                    | d d         dk    S )N      BM r   s    O/var/www/pixelcanvas.ch/venv/lib/python3.11/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                                D ]\  ZZ	e	 e
            e<   dddZddZdS )BmpImageFilez0Image plugin for the Windows Bitmap format (BMP)Windows BitmapBMPr   r   r      r      )RAWRLE8RLE4	BITFIELDSJPEGPNGheaderintoffsetr   Nonec                   | j         j        | j         j        }}|r ||           t           |d                    dd}t	          |d         t
                    sJ t          j        | j         |d         dz
            }|d         dk    rct          |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    rHg d$}t          |          d%k    r]t          |          d&k    r|                    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 |                    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$                              |d         d1          \  | _        }| j        sd2|d          d/}
t          |
          d3}|d         | j	        d#         k    rg d4d5gd6d7gd8}d9d:d;d<d=d>d?d>d@dAdBdC}|d         |v r|d         dDk    r\|d-         ||d                  v rFt	          |d-         t                    sJ ||d         |d-         f         }dE|v rd=n| j        | _        n|d         dFv rJ|d,         ||d                  v r4t	          |d,         t                    sJ ||d         |d,         f         }ndG}
t          |
          dG}
t          |
          |d         | j	        d         k    r|d         dDk    r|dHk    r
dI\  }| _        n@|d         | j	        dJ         | j	        dK         fv rdL}ndM|d          d/}
t          |
          | j        dNk    r#d|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 ]0\  }}|||z  ||z  dz            }|t/          |          dz  k    rdS}1|r|d          dk    rdTndU| _        | j        }n)dN| _        t1          j        |dk    rd9nd@|          | _        |d         | j        d<   |g}|dLk    r+|                    |d         | j	        dK         k               nJt	          |d         t
                    sJ |                    |d         |d         z  dVz   dz	  dWz             |                    |d                    t          j        |dd|d         |d	         f|p| j                                         t          |                    g| _        dXS )Yz Read relevant info about the BMPr   )header_size	directionrB   r'   r   widthr   heightplanes   bitsr6   compressionr4   palette_padding)r(   r)   r*   r+   r,   r-         y_flipr   rC   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>   s&      $X$XQQ[$X$X$X$X$X$Xr%   dpir9   )r_maskg_maskb_mask0   r)   a_mask$   r[   r\   r]   rgb_mask	rgba_maskzUnsupported BMP header type ()   ) re   zUnsupported BMP pixel depth (raw)      rL   r         ~ rh   ri   r   rk   ri   rL   r   rk   rh   ri   rL   rL   ri   rh   rk   rh   ri   rL   rk   rk   ri   rL   rh   r   r   r   r   rh   ri   rL   i   i     i |  i  rt   )r   r   r   r   XBGRBGXRABGRRGBABGRABGARr   zBGR;16r   ))r   rg   )r   rj   )r   rl   )r   rm   )r   rn   )r   ro   )r   rp   )r   rq   )r   rr   )r   rs   )r   ru   r   A)r   r   z Unsupported BMP bitfields layout   )rz   ry   r7   r8   bmp_rlezUnsupported BMP compression (r   i   zUnsupported BMP Palette size (Tr   rL   F1Lrt   N)fpreadseekr.   
isinstancer=   r   
_safe_readi16COMPRESSIONStupleinfolenappend	enumerateOSError_sizegetBIT2MODE_modemodelistranger   r	   rf   palette_Tiletelltile)selfr<   r>   r   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
   W\47<d 	DLLL ttAww<<>
 >
	 )M2C88888*47Im4Lq4PQQ
 ]#r))!$[!!4!4Ig"%k1"5"5Ih"%k1"5"5Ih #K 3 3If'+'8'?Im$+,I'(( }%)CCC"-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'(i(:;UCCCCC$$X$X)DV:W$X$X$XXXDIe'4+<[+III666{##r));''2--X.....1	(+%.u%5%5 I I	T*-k2a<*H*H	$I +.Ih' % 7 7*-dd1gg,,	$!)H"5s;;;;;!)H"5s;;;;;!)H"5s;;;;;!)H"5s;;;;;h'h'h')	*% h'h'h'h'	*	+& N)M2JMMMC#,, )G,c22222)H-s33333w'8)<<
 )F+S11111 }}Xq))*Ihy(( 	(
 )H-s33333R)M2222y7HA7M7Ma)H---F  (||If,=xHH
Hy 	F)F2CFFFC#,, ]#t'8'EEE	 	 	 ..*,AB; ;I 6<;A7=<B<B<B<B,205-5-5 J  I--f%++!+.)If<M2NNN%i&<eDDDDD)9V+<i>T*UVH+.(??	DJJf%11!*-9V;L1MMM%i
&;UCCCCC)9V+<i
>S*TUHH<C!#,,&8cll"}%):5)AAA B&&6R<<'5$$*}%f%f%*
 
 
 %LLM)M2JMMMC#,, 9	(+4444u4444My7JMMMcll"!),=">DDDDD#$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
 $-]#;	- #*9$$KK	-0D4Ef4MMNNNNi0#66666KK)G,y/@@2E!KPRSTTTIk*+++OAy)9X+>?($',,..d	 
			r%   c                    | j                             d          }t          |          sd}t          |          t	          |d          }|                     |           dS )z-Open file, check magic number and read headerrd   zNot a BMP filerN   )r>   N)r   r   r$   SyntaxErrorr.   r   )r   	head_datar   r>   s       r#   _openzBmpImageFile._open3  sc     GLL$$	y!! 	#"Cc"""Y##F#####r%   Nr   r   )r<   r=   r>   r=   r   r?   r   r?   )__name__
__module____qualname____doc__format_descriptionformatr   itemskvvarsr   r   r!   r%   r#   r1   r1   ?   s        :: *F aAVWXXL""$$  1q		f
 f
 f
 f
 f
P$ $ $ $ $ $r%   r1   c                      e Zd ZdZddZdS )	BmpRleDecoderTbuffer$bytes | Image.SupportsArrayInterfacer   tuple[int, int]c                   | j         J | j        d         }t                      }d}| j        j        | j        j        z  }t          |          |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nH| 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nd||d         z  }| j                                         dz  dk    r%| j                             dt          j                   t          |          |k     | j        dk    rdnd}|                     t#          |          |d| j        d	         f           d
S )Nr   r   r      r       r   r   rA   )rA   r   )fdr   	bytearraystatexsizeysizer   r   maxr   r   r   r   osSEEK_CURr   
set_as_rawr   )r   r   rle4datarX   dest_lengthpixelsbyte
num_pixelsfirst_pixelsecond_pixelindex
bytes_readrightup
byte_count	byte_readrawmodes                     r#   decodezBmpRleDecoder.decodeD  sr   w"""y|{{j&)99$ii+%%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+%%v c))##sdWq$)B-.@AAAur%   N)r   r   r   r   )r   r   r   	_pulls_fdr   r!   r%   r#   r   r   A  s3        IC C C C C Cr%   r   c                      e Zd ZdZdZddZdS )DibImageFileDIBr2   r   r?   c                .    |                                   d S )N)r   )r   s    r#   r   zDibImageFile._open  s    r%   Nr   )r   r   r   r   r   r   r!   r%   r#   r   r     s3        F)     r%   r   )r   r   r   )r   r      )r   r   r   )r   r   r   )rz   r   r   )r   r   r   r   ry   imImage.Imager   	IO[bytes]filenamestr | bytesr?   c                *    t          | ||d           d S )NF)_save)r   r   r   s      r#   	_dib_saver     s    	"b(E"""""r%   Tbitmap_headerc                
   	 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        | |t#          j        dd| j        z   d||df          g           d S ) Nzcannot write mode z as BMPrZ   )`   r   c              3  @   K   | ]}t          |d z  dz             V  dS )rU   g      ?N)r=   rV   s     r#   rY   z_save.<locals>.<genexpr>  s3      441AK#%&&444444r%   r   rK   r   r4   r   r(   r   r   r%   c              3  :   K   | ]}t          |          d z  V  dS r   Nr   rW   is     r#   rY   z_save.<locals>.<genexpr>  s,      772a5519777777r%   r   r   c              3  :   K   | ]}t          |          d z  V  dS r   r   r   s     r#   rY   z_save.<locals>.<genexpr>  s,      992a5519999999r%   r   r   r   r   r   rd   l    z)File size is too large for the BMP formatr    r   rf   r   rA   )SAVEr   KeyErrorr   encoderinfor   r   sizejoinr   r   
getpaletter   
ValueErrorwriteo32o16r   r   r   )r   r   r   r   r   rH   rS   er   r   rZ   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"### 
O
B(8!gvr=RSST    s    
A>Az.bmpz	image/bmpr~   z.dib)r   r   r   r   )r   r   r   r   r   r   r   r?   )T)
r   r   r   r   r   r   r   r   r   r?   )$
__future__r   r   typingr   r   re   r   r   r	   _binaryr
   r   r   r.   r   r   r   r   r   r   r$   r/   r1   	PyDecoderr   r   r   r   r   register_openr   register_saveregister_extensionregister_mimeregister_decoderr!   r%   r#   <module>r     s  2 # " " " " " 				         , , , , , , , , , , ! ! ! ! ! ! ! ! ! ! ! !       ! ! ! ! ! ! ! ! ! ! ! !     9 9 9 9$ $ $ $ $9& $ $ $DF F F F FI' F F FX    <    
		 # # # #
 RVB B B B BT  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%   