
     fH                       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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   )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    U/var/www/api.educacionweb.es/myenv/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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PNGc                f   | 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    rg 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                    ||	<   |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@dAdB}|d         |v r|d         dCk    r?|d+         ||d                  v r)||d         |d+         f         }dD|v rd<n| j        | _        n|d         dEv r-|d*         ||d                  v r||d         |d*         f         }ndF}
t          |
          dF}
t          |
          |d         | j        k    r|d         dCk    r|dGk    r
dH\  }| _        n4|d         | j        | j        fv rdI}ndJ|d          d-}
t          |
          | j        dKk    rd|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 ]0\  }}|||z  ||z  dz            }|t1          |          dz  k    rdP}1|r|d         dk    rdQndR| _        | j        }n)dK| _        t3          j        |dk    rd8nd?|          | _        |d         | j	        d<   |g}|dIk    r%|                    |d         | j        k               n-|                    |d         |d         z  dSz   dz	  dTz             |                    |d                    |dd|d         |d	         f|p| j                                         t          |          fg| _        d0S )Uz Read relevant info about the BMPr   )header_size	directionr=   r&   r   widthr   heightplanes   bitscompressionr3   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  V  
dS )o_C@Nr    .0xs     r"   	<genexpr>z'BmpImageFile._bitmap.<locals>.<genexpr>}   s&      $X$XQQ[$X$X$X$X$X$Xr$   dpi)r_maskg_maskb_mask0   r(   a_mask$   rV   rW   rX   rgb_mask	rgba_maskzUnsupported BMP header type ()   )NNNzUnsupported BMP pixel depth (raw)      rG   r         ~ rb   rc   r   re   rc   rG   r   re   rb   rc   rG   rG   rc   rb   re   rb   rc   rG   re   re   rc   rG   rb   r   r   r   r   rb   rc   rG   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   bmp_rlezUnsupported BMP compression (r   i   zUnsupported BMP Palette size (Tr   rG   F1Lrn   )fpreadseekr-   r   
_safe_readi16r5   tupleinfor8   lenappend	enumerateOSError_sizegetBIT2MODE_modemoder6   r7   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   sE   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'(( }%)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'($$X$X)DV:W$X$X$XXXDIe'4>99666{##r));''2--X.....1	(+%.u%5%5 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<;A7=<B<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$   r   Nonec                    | j                             d          }t          |          sd}t          |          t	          |d          }|                     |           dS )z-Open file, check magic number and read headerr_   zNot a BMP filerI   )r   N)r}   r~   r#   SyntaxErrorr-   r   )r   	head_datar   r   s       r"   _openzBmpImageFile._open  sc     GLL$$	y!! 	#"Cc"""Y##F#####r$   Nr   r   r   r   )__name__
__module____qualname____doc__format_descriptionformatCOMPRESSIONSitemskvvarsr   r   r    r$   r"   r0   r0   ?   s        :: *F aAVWXXL""$$  1q		R
 R
 R
 R
h$ $ $ $ $ $r$   r0   c                      e Zd ZdZddZdS )	BmpRleDecoderTbufferr   r   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   r<   )r<   r   )fdr   	bytearraystatexsizeysizer   r~   maxr   r   r   r   osSEEK_CURr   
set_as_rawr   )r   r   rle4datarS   dest_lengthpixelsbyte
num_pixelsfirst_pixelsecond_pixelindex
bytes_readrightup
byte_count	byte_readrawmodes                     r"   decodezBmpRleDecoder.decode0  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gq$)B-%@AAAur$   N)r   r   r   r   )r   r   r   	_pulls_fdr   r    r$   r"   r   r   -  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DIBr1   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   y  s3        F)     r$   r   )rz   r   r   )r{   r      )r   r   r   )r   r   r   )rt   r   r   )rz   r{   r   r   rs   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        | |dd| j        z   d||dffg           d S ) Nzcannot write mode z as BMPrU   )`   r   c              3  @   K   | ]}t          |d z  dz             V  dS )rP   g      ?N)intrQ   s     r"   rT   z_save.<locals>.<genexpr>  s3      441AK#%&&444444r$   r   rF   r   r3   r|   r'   r   rz   r$   c              3  :   K   | ]}t          |          d z  V  dS r   Nr   rR   is     r"   rT   z_save.<locals>.<genexpr>  s,      772a5519777777r$   ry   r{   c              3  :   K   | ]}t          |          d z  V  dS r   r   r   s     r"   rT   z_save.<locals>.<genexpr>  s,      992a551999999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   r   rC   rN   er   r   rU   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/bmprx   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   r   r   _binaryr	   r   r
   r-   r   r   r   r   r   r   r#   r.   r0   	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k$ k$ k$ k$ k$9& k$ k$ k$\F F F F FI' F F FX    <    
		 # # # #
 RV@S @S @S @S @SP  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$   