
    є jV                        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	 ddl
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mZmZ ddlmZ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Z0de*de,e)e)f         de/de#j#        fdZ1dede,eeeef         fd Z2de,e)e)f         de/de&dee*ef         d!e)d"e*de,e#j#        e*e*e-f         fd#Z3de,e)e)f         de/de&de*d!e)de,e#j#        e*e*e-f         fd$Z4d%e#j#        d&e5e*ef         d'edee*e+e         ef         d(e-de#j#        fd)Z6d&e5e*ef         d!e)dee*e+e         ef         de,e&e-f         fd*Z7	 d/d+e5e*ef         d,ee5e*ef         df         de,ee*         e/ef         fd-Z8dS )0z1Functions to convert an image XObject to an image    N)BytesIO)AnyLiteralOptionalUnioncast   )check_if_whitespace_onlylogger_warning)ColorSpacesStreamAttributes)FilterTypes)ImageAttributes)EmptyImageDataErrorLimitReachedErrorPdfReadError)ArrayObjectDecodedStreamObjectEncodedStreamObject
NullObjectTextStringObjectis_null_or_none)   
   )	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          |           rdS d}t          | t                    r| }nt          | t
                    st          d|           | sdS | d                             d          rd| d         dd	         z   }n| d         d
k    rM| d                                         }t          t          |d                   }|
                    dd          }n(| d         dk    r<| d                                         }t          ||||dz             \  }}|dv rd}||fS | d         dk    r6| d                                         }t          ||||dz             \  }}|dfS | d         dk    r| }t          | d                   }| d                                         }|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 deeply. If required, consider increasing MAX_IMAGE_MODE_NESTING_DEPTH.)r   Fr   zCannot interpret color spacer   z/Calz/Device   N	/ICCBased   z/Nz
/Alternate/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
/DeviceRGBr4   2bit4bit)r(   r   r   
isinstancestrlist
startswith
get_objectr   intget_get_image_modelenr   __name__values)
r)   r*   r+   r,   color_space_stricc_profilemodeinvert_colororiginal_color_spacemode_maps
             pC:\Users\Terasoftware\OneDrive\Desktop\faahhh\fyndo\fyndo\venv\Lib\site-packages\pypdf/generic/_image_xobject.pyr@   r@   *   s    ++ 
l
 
 	
 {## yO+s## *"%T** ("*K
 
 	
  $"y	Q	"	"6	*	* ""#k!nQRR&88	Q;	&  "!!n//11[%677%//,;;	Q:	% "%a.3355,-y%!)
 
l ?" 	D\!!	Q=	( "%a.3355,-y%!)
 
l Tz	Q:	% "*{1~..%a.3355m+ 	0@A0E 	#A&q)X5 q1!4Q7qqq   9,-y%!)
 
l \!! * *H 	_%% 	!!""#34	 	     datasizebitsc                    ddl m} |d         |d         z  }||k    rt          d| d| d          t          |          }d|z  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   )FLATE_MAX_BUFFER_SIZEr1   zRequested buffer size z exceeds limit of .   )pypdf.filtersrP   r   	bytearrayrangebytes)rL   rM   rN   rP   buffer_sizebyte_buffermask
data_indexbityxs              rJ   	bits2byter^   |   s6   333333q'DG#K** r p p pXm p p pqqqK((KI?DJ
d(C47^^ 	 	!d(? 	!OJd(CtAw 	 	A,0,<,Ct+KKAQK(4KCQw a
$h	 rK   rF   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   r1   z9Data is 0 bytes, cannot process an image from empty data.rK   c              3   X   K   | ]$}t          |ft                    z            V  %d S N)rV   r>   ).0r]   ks     rJ   	<genexpr>z-_extended_image_from_bytes.<locals>.<genexpr>   s7      ;;qdSVVm,,;;;;;;rK   )r   	frombytes
ValueErrorrA   r   join)rF   rM   rL   imgexcnb_pixdata_lengthrc   s          @rJ   _extended_image_from_bytesrl      s    0odD$// 0 0 0a47"$ii! 	%K  1$ 	ISYY,xx;;;;d;;;;;odD$//0 Js    
B;BB66B;c                    t          |           }|dk    rd | D             \  } }}}| |||fS | d         }t          |t                    r|n|                                }|dk    red|v ra| d                                         | d                                         }} |                    d          \  }}t          |          }| |||fS t          d| d	|            )
Nr/   c              3   >   K   | ]}|                                 V  d S ra   )r=   )rb   values     rJ   rd   z*__handle_flate__indexed.<locals>.<genexpr>   s.      +X+X5E,<,<,>,>+X+X+X+X+X+XrK   r1   r    r   r	   z(Expected color space with 4 values, got z: )rA   r9   r:   r=   splitr>   r   )r)   countbasehivallookupelement1s         rJ   __handle_flate__indexedrw      s   Ez 0+X+XK+X+X+X(T5&D%// 1~H%h44Oxx(:M:M:O:OHz 0f( 0)!n7799;q>;T;T;V;VVnnV,,eE

D%//
X%XX;XX
Y
YYrK   colorsobj_as_textc                    d}d}t          |t                    r |d         dk    rt          |          \  }}}	|dk    rd}t          || d          }n|dk    rd}t          || d	          }t	          || |          |dk    rct          t
          t          f          r                                t          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?          |          sE|d         d#k    r9|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
    .pngPNGr   r2   r!   r#   r	   r"   r/   )r   r   r   )r1   r#   r$   )r   r#   r    )r/   r#   r&   )r   r$   r#   r    r&   r   r   z#Not enough lookup values: Expected z, got rQ   Nz!Too many lookup values: Expected rK   c              3      K   | ]?d                      fdt          j        d                   D                       V  @dS )rK   c              3   b   K   | ])}                     |f          d k    rdnd         V  *dS )   r1   r   N)getpixel)rb   r]   
colors_arrrh   r\   s     rJ   rd   z*_handle_flate.<locals>.<genexpr>.<genexpr>   sZ         #aV(<(<s(B#I11J     rK   r   N)rg   rU   rM   )rb   r\   r   rh   s    @rJ   rd   z _handle_flate.<locals>.<genexpr>   s        
 	 HH      !&sx{!3!3         rK   r1   zInvalid Lookup Table in r$   c                 2    g | ]}t          |||g          S  )rV   )rb   bs     rJ   
<listcomp>z!_handle_flate.<locals>.<listcomp>  s&    &H&H&HAuaAY'7'7&H&H&HrK   r    r&   c              3   2   K   | ]}||d z            V  dS )r/   Nr   )rb   nru   s     rJ   rd   z _handle_flate.<locals>.<genexpr>  sA       + +./q1q5y)+ + + + + +rK      )rawmodezBase z8 not coded please share the pdf file with pypdf dev teamr0   .tifTIFFF) r9   r   rw   r^   rl   r   r   get_datar   original_bytesr:   encoder@   rF   rA   r   rB   rV   r
   rg   rU   rM   r   re   convertr>   append
putpaletter   DEVICE_GRAYKeyErrorr   )rM   rL   rF   r)   rx   ry   	extensionimage_formatrs   rt   nbconvexpected_countactual_countarr_rgb_c_m_y_k_r_g_bmode2r   rh   ru   s                           @@@rJ   _handle_flater      sk    IL +{++ PA*0L P+B;+O+O(T5&w (tQ''	 (tQ''
$T4
6
6Cj  R8f24GHII 	'__&&Ff.// 	+*Ffc"" 	%]]__FA	Q " &(  dAr**1-/NBd x3 19!"R"6{{>1 5#n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     
 #38A;//     odCHc::kk$''v;;519"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 9NN64N888++T[-D%DOcc%PPCCs  	 	 	VVVV   FFF	t [)) 	8k!n.K 	8
 3; 	8#K>>qAEu} 8odD$77v~ 	i..s   >'O   %O('O(c                     d}t          j        t          |          d          }t          |||          \  }}|dk    r t	          t
          |j                  }|dk    }|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
k    r|
                    d          }d}	||	||fS )zc
    Process image encoded as JPX/JPEG2000
    Returns img, image_format, extension, inversion
    .jp2)JPEG2000formatsr   r&   r%   r    r$   r#   r0   r   )r   openr   r@   r   r'   rF   re   rM   tobytesr   )
rM   rL   rF   r)   rx   r   img1rG   rh   r   s
             rJ   _handle_jpxr   -  s8    I
74==-HHHD(fdCCD,rz &M49--v~yF tu} yD !TY-#s; !
)T	vv.	. ! odDIt||~~>>ll4   x6 !k[8 !kk%  Li55rK   rh   x_object_objlfiltersrG   c                   	 t           j        |v r|t           j                 n| j        dk    r?|t          j        k    r/|sddgnddgt          |                                           z  nQ| j        dk    r|t          j        k    s|r2| 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&   g      ?g        r$   r   r2   r3   c              3   6   K   | ]}|         |d z  k    V  dS )r	   Nr   )rb   idecodes     rJ   rd   z _apply_decode.<locals>.<genexpr>q  s0      %U%UQfQi1q5&8%U%U%U%U%U%UrK   r	   r1   c              3   T   K   | ]"}t          d |d z  z
  z  z   z            V  #dS )g     o@N)round)rb   jdmaxdmins     rJ   rd   z _apply_decode.<locals>.<genexpr>v  sS        FGeq5yD4K84?@AA     rK      )IADECODErF   FT
JPX_DECODErA   getbands
DCT_DECODEr9   r   r=   allrU   extendpoint)
rh   r   r   r)   rG   lutr   r   r   r   s
          @@@rJ   _apply_decoder   R  s/    
yL  
bi( 
V	 BM 9 #/?#sc3Z#cllnn---
(f
 R]!:  QTQY]`Q` sc#,,..111 	;,,N%%'':5 ;,,2N%%''=82 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JrK   c                 T   t           j        | v r"| t           j                 t          j        k    rd}|                     dd          dk     r,t          |                     dd           ddd          \  }}n/t          ||dk    rt          |          sd|vrd	n|d          \  }}||fS )
Nr    z/BitsPerComponentrR   r[   r   r   r1   Grayr	   )r   COLOR_SPACEr   
DEVICE_RGBr?   r@   r   )r   rx   r)   rF   rG   s        rJ   _get_mode_and_invert_colorr   }  s     	,&$(K,BB$
 $+Q//!3 
, 3Q77<<<a
 
ll - ! (44	
 k1AA 
 
l rK   x_objectpillow_parametersc                 R   dt           j         dt          t          t          f         dt          dt          dt          dt          t           j         t          t          f         fd}| | j                                        n|                                 }t          t          | t          j
                           t          t          | t          j                           f}|                                 }t          |t                    r|                                }t          |          |d	         |d
         z  z  d
k    r|d         dk    r
|dd         }|                     dd
          }|                     dt#                                                                }t          |t&                    r-t          |          d
k    r|d	                                         }t)          | ||          \  }}	|                     t*          j        t#                                                                }
t          |
t&                    r|
d         n|
}|                     t*          j                  }|r%t          |t          t&          f          r	|d	         }ni }t          |t                    si }d}|t0          j        t0          j        fv rt7          ||||||          \  }}}}n|t0          j        t0          j        fv ra|t0          j        k    rd}d}nd}d}	 t          j        t?          |          d          }nN# t@          $ r tC          |||          }Y n0w xY w|t0          j"        k    r&t          j        t?          |                    dd}}}n|t0          j#        k    rtI          |||||          \  }}}}	n|t0          j%        k    r-t          j        t?          |          d          dddf\  }}}}	n|t0          j&        k    r-t          j        t?          |          d          dddf\  }}}}	nS|dk    rtC          |||          dddf\  }}}}	n2|dk    rtO          d|            tC          |||          dddf\  }}}}	tQ          || |||	          } ||| |||          \  }}}|i }|dk    rd|_)        d|vrd|d<   t?                      }	  |j*        |fd |i| nN# tV          $ rA |,                    d!          }d}d}t?                      }|*                    ||"           Y nw xY w|-                                }	 t          j        t?          |                    }n1# t\          $ r$}t_          d#| t`                     d}Y d}~nd}~ww xY w|||fS )$a  
    Users need to have the pillow package installed.

    It's unclear if pypdf will keep this function here, hence it's private.
    It might get removed at any point.

    Args:
        x_object:
        pillow_parameters: parameters provided to Pillow Image.save() method,
            cf. <https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image.save>

    Returns:
        Tuple[file extension, bytes, PIL.Image.Image]

    rh   r   ry   r   r   r-   c                    d }t           j        |v rt          |t           j                           d         }| j        |j        k    rt	          d| t
                     nv|j        dk    r|                    d          }| j        dk    r|                     d          } n | j        dk    r|                     d          } |                     |           d|v rd}d	}nd
}d}| ||fS )Nr	   z"image and mask size not matching: r$   r#   r    r   JPEGr   r   r|   r{   )	r   S_MASK_xobj_to_imagerM   r   rB   rF   r   putalpha)rh   r   ry   r   r   alphas         rJ   _apply_alphaz$_xobj_to_image.<locals>._apply_alpha  s
    9  	#"8BI#677:Ex5:% $FFF   
 :$ /!MM#..E8s? +++e,,CCX_ +++c**CU###% #)"		$"	I|++rK   Nr   r1   r   z/Colorsz/ColorSpacer   z.tiffr|   r{   )r   r|   r   r   z.jpg)r   F)r|   PPMr&   r   r   zColorSpace field not found in qualitykeepformatr%   )r   zFailed loading image: )1r   dictr:   r   tupleindirect_reference__repr__r   r>   r   WIDTHHEIGHTr   r9   r   rA   r?   r   r=   r;   r   r   FILTERDECODE_PARMSr   FLATE_DECODERUN_LENGTH_DECODEr   
LZW_DECODEASCII_85_DECODEr   r   r   rl   r   r   r   CCITT_FAX_DECODEJBIG2_DECODEr   r   r   saveOSErrorr   getvalue	Exceptionr   rB   )r   r   r   ry   rM   rL   rx   r)   rF   rG   filtersr   decode_parmsr   rh   r   _img_byte_arrr   	exceptions                       rJ   r   r     s7   &,[,sCx., , 	,
 , 
u{C$	%, , , ,D 	!#,,...    hrx())4Xbi5H+I+IJDD$ {{}}
4yyDGd1g%&!+ RD0@ CRCy \\)Q''F||M:<<@@KKMMK+t$$ 2[)9)9Q)> 2!!n//113HfkRRD, ll+2JLLAALLNNG($77Dwr{{WH<< 0 =>>L 
<%?? #AlD)) IBOR%9:: ;
*7+
 +
'\9aa 
bmR%78	8 2
 r}$ 	!LII LI	?*WT]]ODDDCC% 	? 	? 	?,T4>>CCC	?	R]	" $
',z'$--'@'@&&9\	R]	" !
5@$k66
 6
2\9ll 
R(	( 
Jwt}}i888	6
2\9ll 
R_	$ 
Jwt}}n===	6
2\9ll 
 
&tT488	6
2\9ll 
 
FHFFGGG 'tT488	6
2\9l Xxl
K
KC#/<X{L)$ $ CL  v 2 
-- 	2+1i( 99L5HHlH6GHHHH 5 5 5{{6""	yy		,|	444445   ""Dj''   ;	;;XFFF dCs=   #M   MMS. .AT98T9!U3 3
V!=VV!)r   ra   )9__doc__sysior   typingr   r   r   r   r   _utilsr
   r   	constantsr   r   r   r   r   r   errorsr   r   r   genericr   r   r   r   r   r   version_infor   typing_extensionsPILr   r   ImportErrorr'   __annotations__r(   r>   r:   r;   r   boolr@   rV   r^   rl   rw   r   r   r   r   r   r   r   rK   rJ   <module>r      s   7 7 7 



       6 6 6 6 6 6 6 6 6 6 6 6 6 6 = = = = = = = = 5 5 5 5 5 5 5 5 ) ) ) ) ) ) - - - - - - I I I I I I I I I I                BQB7" ,       ++++++111111111   
+	=   #>y    %' c & & & 	O  O sDIs*+O O  O  	O 
 =$O  O  O  O dE sCx      0
38_,1
[   (Z ZsCc?Q9R Z Z Z Z$p/
S/p/
p/ p/ sK'(	p/
 p/ p/ 5;S$&'p/ p/ p/ p/f"6
S/"6
"6 "6 	"6
 "6 5;S$&'"6 "6 "6 "6J(	(sCx.( ( sDIs*+	(
 ( [( ( ( (VsCx.*-<A#tCyRUBU<V
=$   @ :>s  s sCx.s  c3h!56s  8C=%$%s  s  s  s  s  s s   3A< <B