
    Ng6                     H   U d Z ddlZddlmZ ddlmZmZmZmZm	Z	m
Z
mZ ddlmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZmZmZmZmZ ej        dd         dk    rddlmZ nddl mZ 	 ddl!m"Z"m#Z# n# e$$ r  e$d          w xY wed         Z%ee&d<   dZ'e(e&d<   	 d+de
e)ee         ef         de(de%de(de	e%e*f         f
dZ+de,de	e(e(f         de(de,fdZ-de)de	e(e(f         de,de"j"        fd Z.de	e(e(f         de,de%de)d!e(d"e)de	e"j"        e)e)e*f         fd#Z/de	e(e(f         de,de%de)d!e(de	e"j"        e)e)e*f         fd$Z0d%e"j"        d&ee)ef         d'ede
e)ee         ef         d(e*de"j"        fd)Z1d&ee)ef         d!e(de
e)ee         ef         de	e%e*f         fd*Z2dS ),z9Code in here is only used by pypdf.filters._xobj_to_image    N)BytesIO)AnyDictListLiteralTupleUnioncast   )check_if_whitespace_onlylogger_warning)ColorSpaces)FilterTypes)ImageAttributes)EmptyImageDataErrorPdfReadError)ArrayObjectDecodedStreamObjectEncodedStreamObjectIndirectObject
NullObject   )   
   )	TypeAlias)ImageUnidentifiedImageErrorz]pillow is required to do image extraction. It can be installed via 'pip install pypdf[image]')	 1RGB2bits4bitsPLRGBACMYKmode_str_typer   MAX_IMAGE_MODE_NESTING_DEPTHcolor_spacecolor_components	prev_modedepthreturnc                 :   |t           k    rt          d          t          | t                    rdS t          | t                    rnt          | t
                    st          d|           | d                             d          rd| d         dd         z   } n| d         d	k    rM| d
                                         }t          t          |d                   }|
                    dd          } nV| d         dk    r<| d
                                         } t          | |||d
z             \  }}|dv rd}||fS | d         dk    rM| d         } t          | t                    r|                                 } t          | |||d
z             \  }}|dfS | d         dk    r| }t          | d
                   }| d         } t          | t                    r|                                 } | dk    r?|d
k    r9|d
         d         dk    r%t          d|d
         d          dt                     dS t          | |||d
z             \  }}||fS dddddddd }|
                    |           p(t          |                                          |         p|}	|	|	dk    fS )!z
    Returns
        Image mode not taking into account mask(transparency)
        ColorInversion is required (like for some DeviceCMYK)

    z\Color spaces nested too deep. If required, consider increasing MAX_IMAGE_MODE_NESTING_DEPTH.)r   FzCannot interpret colorspacer   z/Calz/Device   N	/ICCBasedr   z/Nz
/Alternater   /Indexed)r    r&   r#   /Separationr   Tz/DeviceN/DeviceCMYKz/BlackzColor z8 converted to Gray. Please share PDF with pypdf dev team)r$   Tr   r$   r    r&   r!   r"   )1bitz/DeviceGraypalettez
/DeviceRGBr3   2bit4bit)r(   r   
isinstancer   strlist
startswith
get_objectr
   intget_get_imagemoder   lenr   __name__values)
r)   r*   r+   r,   icc_profilemode2invert_colororiginal_color_spacemode_mapmodes
             U/var/www/html/ai-engine/env/lib/python3.11/site-packages/pypdf/_xobj_image_helpers.pyr?   r?   )   s    +++j
 
 	
 +z** y+s## ,#T** *#);
 
 	
 
Q	"	"6	*	* &#+a."44	Q;	&	&!!n//11[%677!oolB77	Q:	%	%!!n//11,)9eai
 
| O##El""	Q=	(	(!!nk>22 	3%0022K,)9eai
 
| d{	Q:	%	%*{1~..!!nk>22 	3%0022K-'',<,A,A#A&q)X55q1!4Q7qqq   9,)9eai
 
| l""  H 	[!! 	!!""#34	 	
     datasizebitsc                 d   d|z  dz
  }t          |d         |d         z            }d}d|z
  }t          |d                   D ]_}|d|z
  k    r
|dz  }d|z
  }t          |d                   D ]4}| |         |z	  |z  |||d         z  |z   <   ||z  }|dk     r
|dz  }d|z
  }5`t          |          S )Nr   r      )	bytearrayrangebytes)	rK   rL   rM   masknbuffbybityxs	            rI   	bits2byterY   z   s    I?Dd1gQ'((E	
B
d(C47^^ 	 	!d(??!GBd(CtAw 	 	A&*2h#o%=E!d1g+/"4KCQwwa$h	 <<rJ   rH   c                    	 t          j        | ||          }n# t          $ r}|d         |d         z  }t          |          }|dk    rt	          d          |||z  dk    r||t          |           z  |z  d                    fd|D                       }t          j        | ||          }Y d }~nd }~ww xY w|S )Nr   r   z9Data is 0 bytes, cannot process an image from empty data.rJ   c                 P    g | ]"}t          |ft                    z            #S  )rR   r=   ).0rX   ks     rI   
<listcomp>z-_extended_image_frombytes.<locals>.<listcomp>   s-    <<<!tc!ff}--<<<rJ   )r   	frombytes
ValueErrorr@   r   join)rH   rL   rK   imgexcnb_pixdata_lengthr^   s          @rI   _extended_image_frombytesrg      s    0odD$// 0 0 0a47"$ii!%K  1$$ISYY,xx<<<<t<<<==odD$//0 Js    
B;BB66B;colorsobj_as_textc                    d}d}t          |t                    r|d         dk    rd |D             \  }}}	|dk    rd}t          || d          }n|d	k    rd}t          || d
          }t          || |          |dk    rdddlm}
 t          t          t          f          r                                t          |
          rj	        t          t                    r                                	 ddddddt          |dd          d                  \  }}}j        dk    rd|z  }t                    }||k    ry||k     r6t          d| d| dt                      t#          dg||z
  z            z  n3t%          |d                   st          d| d| dt                      d|         d|         |d         gd                    fdt)          j        d                   D                       }t-          j        |j        |          nj                    |          t                    |	dz   |z  k    rt          d| t                      dn|dk    r"d                    d D                       d}n|dk    rg }fd t)          dd
t                    d
z  z  d
          D             D ]\  }}}}t3          d!d|d!z  z
  z  d|d!z  z
  z            }t3          d!d|d!z  z
  z  d|d!z  z
  z            }t3          d!d|d!z  z
  z  d|d!z  z
  z            }|                    t#          |||f                     d                    |          d}                    |"                               |t8          j        k    rdnd          n# t<          $ r t          d#| d$t                      dY nXw xY wt          |t>                    s?|d         d%k    r3t          |||          d         }||k    rt-          j        || |          |dk    rd&}d'}||d(fS ))zh
    Process image encoded in flateEncode
    Returns img, image_format, extension, color inversion
    z.pngPNGr   r1   c              3   >   K   | ]}|                                 V  d S )N)r<   )r]   values     rI   	<genexpr>z _handle_flate.<locals>.<genexpr>   s.      +X+X5E,<,<,>,>+X+X+X+X+X+XrJ   r!   r#   r   r"   r/   r   )TextStringObject)r   r   r   )r   r#   r$   )r   r#   r    )r/   r#   r&   )r   r$   r#   r    r&   r   r   z#Not enough lookup values: Expected z, got .Nz!Too many lookup values: Expected rJ   c           	          g | ]=d                      fdt          j        d                   D                       >S )rJ   c                 Z    g | ]'}                     |f          d k    rdnd         (S )   r   r   )getpixel)r]   rX   
colors_arrrc   rW   s     rI   r_   z,_handle_flate.<locals>.<listcomp>.<listcomp>   sM       $% !+aV0D0Ds0J0J11PQ R  rJ   r   )rb   rQ   rL   )r]   rW   ru   rc   s    @rI   r_   z!_handle_flate.<locals>.<listcomp>   sx              ).sx{););     rJ   zInvalid Lookup Table in r$   c                 2    g | ]}t          |||g          S r\   )rR   )r]   bs     rI   r_   z!_handle_flate.<locals>.<listcomp>   s&    &H&H&HAuaAY'7'7&H&H&HrJ   r    r&   c              3   2   K   | ]}||d z            V  dS )r/   Nr\   )r]   nlookups     rI   rn   z _handle_flate.<locals>.<genexpr>   sA       + +./q1q5y)+ + + + + +rJ      )rawmodezBase z8 not coded please share the pdf file with pypdf dev teamr0   z.tifTIFFF) r8   r   rY   rg   genericro   r   r   get_dataoriginal_bytesr9   encoder?   rH   r@   r   rA   rR   r   rb   rQ   rL   r   r`   convertr=   append
putpaletter   DEVICE_GRAYKeyErrorr   )rL   rK   rH   r)   rh   ri   	extensionimage_formatbasehivalro   nbconvexpected_countactual_countarr_rgb_c_m_y_k_r_g_brD   ru   rc   rz   s                            @@@rI   _handle_flater      sT    IL +{++ YA*0L0L+X+XK+X+X+X(T5&wtQ''	tQ''
#D$
5
5Cj  ------f24GHII 	'__&&Ff.// 	+*Ffc"" 	%]]__FE	Q " &(  T1b))!,.NBd x3!"R"6{{>11#n44&g.ggXdggg$   %~/L(M"N"NN5f^__6MNN &eeeVbeee$   $O^O4F$SbSk6"##;7
hh     "'sx{!3!3  
 
 odCHc::kk$''v;;519"222"#Kk#K#KXVVV!FFS[[ XX&H&H&H&H&HIIF DD V^^D+ + + +38AVPQAQ<RTU3V3V+ + + 9 9BB !BH!5R#X!FGG BH!5R#X!FGG BH!5R#X!FGGE2r2,$7$78888 XXd^^F D%NN64N888++T[-D%D%Dcc%PPCC{  	 	 	VVVV   FFF	| Z00 5[^{5R5R {FD99!<5==/%t44Cv~~	i..s   <'N> >%O&%O&c                    d}t          j        t          |          d          }t          |||          \  }}|dk    rt	          t
          |j                  }|dv }|j        dk    r|dk    rd}|j        |k    s|j        |hdd	hk    r|}nR|j        |hdd
hk    r.t          j        ||j        |	                                          }n|
                    |          }|j        d
k    r|
                    d          }d}	||	||fS )zb
    Process image encoded in flateEncode
    Returns img, image_format, extension, inversion
    z.jp2)JPEG2000)formatsr   )r&   r%   r    r$   r#   r&   r   )r   openr   r?   r
   r'   rH   r`   rL   tobytesr   )
rL   rK   rH   r)   rh   r   img1rE   rc   r   s
             rI   _handle_jpxr     s    I:gdmm];;;D'VTBBD,rzzM49--y(yFtu}}yDTY-#s;;
)T	vv.	.	. odDIt||~~>>ll4   x6kk%  Li55rJ   rc   x_object_objlfiltersrE   c                 z  	 |                     t          j        | j        dk    r|t          j        t          j        fv s|r1| j        dk    r&ddgt          |                                           z  nd           t          |t                    r |d                                         dk    rd t          |t                    rD|d                                         dk    r&ddgt          |                                           z  t          fdt          t                              D                       szg }t          dt                    d	          D ]D}|         	|d
z            |                    	fdt          d          D                        E|                     |          } | S )Nr&   r$   g      ?g        r   r1   r2   c              3   6   K   | ]}|         |d z  k    V  dS )r   Nr\   )r]   idecodes     rI   rn   z _apply_decode.<locals>.<genexpr>W  s0      %U%UQfQi1q5&8%U%U%U%U%U%UrJ   r   r   c              3   T   K   | ]"}t          d |d z  z
  z  z   z            V  #dS )g     o@N)round)r]   jdmaxdmins     rI   rn   z _apply_decode.<locals>.<genexpr>\  sS        FGeq5yD4K84?@AA     rJ      )r>   IADECODErH   FT
DCT_DECODE
JPX_DECODEr@   getbandsr8   r   r<   allrQ   extendpoint)
rc   r   r   r)   rE   lutr   r   r   r   s
          @@@rI   _apply_decoder   ;  s    
	 XH0N$N$N %O!$S sc#,,..))	)	)
  F 	;,,N%%'':55;,,2N%%''=88sc#,,..111#%U%U%U%U%FBTBT%U%U%U"U"Uq#f++q)) 	 	A!9D!a%=DJJ     KPQT::       iinnJrJ   c                 `   t           j        | v r"| t           j                 t          j        k    rd}|                     dd          dk     r,t          |                     dd           ddd          \  }}n5t          ||dk    rt          |t                    sd|vrd	n|d          \  }}||fS )
Nr    z/BitsPerComponentrO   rV   r   r   r   Grayr   )r   COLOR_SPACEr   
DEVICE_RGBr>   r?   r8   r   )r   rh   r)   rH   rE   s        rI   _get_mode_and_invert_colorr   c  s     	,&&(K,BBB $+Q//!33+ 3Q77<<<a
 
ll , !";
;;  k11 A 
 
l rJ   )r   )3__doc__sysior   typingr   r   r   r   r   r	   r
   _utilsr   r   	constantsr   r   r   r   r   errorsr   r   r~   r   r   r   r   r   version_infor   typing_extensionsPILr   r   ImportErrorr'   __annotations__r(   r=   r9   boolr?   rR   rY   rg   r   r   r   r   r\   rJ   rI   <module>r      sb   ? ? ? 



       ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? < < < < < < < < " " " " " " ( ( ( ( ( ( , , , , , , 5 5 5 5 5 5 5 5              BQB7""       ++++++111111111   
+	=   #>y    %' c & & & 	N  N sDIs*+N N  N  	N 
 =$N  N  N  N bE sCx      $
38_,1
[   (r/
S/r/
r/ r/ 	r/
 r/ r/ 5;S$&'r/ r/ r/ r/j#6
S/#6
#6 #6 	#6
 #6 5;S$&'#6 #6 #6 #6L%	%sCx.% % sDIs*+	%
 % [% % % %PsCx.*-<A#tCyRUBU<V
=$     s   1A: :B