
    ۡiS                     n   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 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# 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"jD                  fd Z0dede+eeeef   fd!Z1de+e(e(f   de.de%de)d"e(d#e)de+e"jD                  e)e)e,f   fd$Z2de+e(e(f   de.de%de)d"e(de+e"jD                  e)e)e,f   fd%Z3d&e"jD                  d'e4e)ef   d(edee)e*e   ef   d)e,de"jD                  fd*Z5d'e4e)ef   d"e(dee)e*e   ef   de+e%e,f   fd+Z6	 d0d,e4e)ef   d-ee4e)ef   df   de+ee)   e.ef   fd.Z7y# e$$ r	  e$d      w xY w)1z1Functions 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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         kD  rt        d      t        |       ryd}t        | t              r| }n`t        | t
              st        d|       | sy| d   j                  d      rd| d   dd	 z   }n | d   d
k(  r9| d   j                         }t        t        |d         }|j                  dd      }n| d   dk(  r1| d   j                         }t        ||||dz         \  }}|dv rd}||fS | d   dk(  r+| d   j                         }t        ||||dz         \  }}|dfS | d   dk(  rk| }t        | d         }| d   j                         }|dk(  r+|dk(  r&|d   d   dk7  rt        d|d   d    dt               yt        ||||dz         \  }}||fS dddddddd }	|	j                  |      xs  t        |	j                               |   xs |}||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	/ICCBasedr	   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
/DeviceRGBr3   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
             c/home/obispo/Crisostomo_bridge/mision_env/lib/python3.12/site-packages/pypdf/_xobj_image_helpers.pyr?   r?   *   sq    ++l
 	
 {#O+s#%T**K
 	
 	Q	"	"6	*#k!nQR&88	Q;	&!!n//1[%67%//,;	Q:	%%a.335,-y%!)
l ?"D\!!	Q=	(%a.335,-y%!)
l Tz	Q:	%*{1~.%a.335m+0@A0E#A&q)X51!4Q788pq ,-y%!)
l \!! *H 	_% 	!"#34	 	     datasizebitsc                 &   d|z  dz
  }t        |d   |d   z        }d}d|z
  }t        |d         D ]S  }|d|z
  k7  r
|dz  }d|z
  }t        |d         D ].  }| |   |z	  |z  ||||d   z  z   <   ||z  }|dk  s%|dz  }d|z
  }0 U t        |      S )Nr	   r      )	bytearrayrangebytes)	rK   rL   rM   maskbyte_buffer
data_indexbityxs	            rI   	bits2byterY   |   s    I?DDGd1g-.KJ
d(C47^ 	!d(?!OJd(CtAw 	A,0,<,Ct+KKAQK(4KCQwa
$h			 rJ   rE   c                 L   	 t        j                  | ||      }|S # t        $ r~}|d   |d   z  }t        |      }|dk(  rt	        d      |||z  dk7  r||t        |       z  |z  dj                  fd|D              }t        j                  | ||      }Y d }~|S d }~ww xY w)Nr   r	   z9Data is 0 bytes, cannot process an image from empty data.rJ   c              3   N   K   | ]  }t        |ft              z          y wN)rR   r=   ).0rX   ks     rI   	<genexpr>z-_extended_image_from_bytes.<locals>.<genexpr>   s      ;qdSVm,;s   "%)r   	frombytes
ValueErrorr@   r   join)rE   rL   rK   imgexcnb_pixdata_lengthr^   s          @rI   _extended_image_from_bytesrg      s    0oodD$/ J  0a47"$i!%K 1$ISY,xx;d;;oodD$/J0s    	B#A3BB#c                 b   t        |       }|dk(  rd | D        \  } }}}| |||fS | d   }t        |t              r|n|j                         }|dk(  rOd|v rK| d   j                         | d   j                         }} |j	                  d      \  }}t        |      }| |||fS t        d| d	|        )
Nr/   c              3   <   K   | ]  }|j                           y wr\   )r<   )r]   values     rI   r_   z*__handle_flate__indexed.<locals>.<genexpr>   s     +X5E,<,<,>+Xs   r	   r    r   r   z(Expected color space with 4 values, got z: )r@   r8   r9   r<   splitr=   r   )r)   countbasehivallookupelement1s         rI   __handle_flate__indexedrr      s    Ez+XK+X(T5&D%// 1~H%h4x(:M:M:OHzf()!n779;q>;T;T;VVnnV,eE
D%//
A%;-X
YYrJ   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(  rt        t
        t        f      rj                         t        t              rj                  t        t              rj                         	 d
dd
dddt        dd      d      \  }
}}j                  dk(  rd|
z  }t              }||k7  r\||k  r-t        d| d| dt                t#        dg||z
  z        z  n%t%        |d       st        d| d| dt                d| d|
 |
d gdj'                  fdt)        j*                  d         D              }t-        j.                  |j*                  |      n@j1                  |      t              	dz   |
z  k7  rt        d| t                dn|dk(  r.dj'                  D cg c]  }t#        |||g       c}      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        }|j5                  t#        |||f             } dj'                  |      d}j7                  |       j1                  |t8        j:                  k(  rdnd      nDt        |t>              s4|d   d"k(  r,t        |||      d   }||k7  rt-        j.                  || |      |dk(  rd#}d$}||d%fS c c}w # t<        $ r t        d  d!t                dY 5w xY w)&zh
    Process image encoded in flateEncode
    Returns img, image_format, extension, color inversion
    .pngPNGr   r1   r!   r#   r   r"   r/   )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              3      K   | ]6  d j                  fdt        j                  d         D               8 yw)rJ   c              3   X   K   | ]!  }j                  |f      d kD  rdnd    # yw)   r	   r   N)getpixel)r]   rX   
colors_arrrc   rW   s     rI   r_   z*_handle_flate.<locals>.<genexpr>.<genexpr>   s4       #aV(<s(B1Js   '*r   N)rb   rQ   rL   )r]   rW   r}   rc   s    @rI   r_   z _handle_flate.<locals>.<genexpr>   s>      
 	 HH !&sxx{!3 s   <A r	   zInvalid Lookup Table in r$   r    r&   c              3   .   K   | ]  }||d z      yw)r/   N )r]   nrp   s     rI   r_   z _handle_flate.<locals>.<genexpr>  s!      +./q1q5)+s      )rawmodezBase z8 not coded please share the pdf file with pypdf dev teamr0   .tifTIFFF) r8   r   rr   rY   rg   r   r   get_datar   original_bytesr9   encoder?   rE   r@   r   rA   rR   r
   rb   rQ   rL   r   r`   convertr=   append
putpaletter   DEVICE_GRAYKeyErrorr   )rL   rK   rE   r)   rs   rt   	extensionimage_formatrn   ro   nbconvexpected_countactual_countarrb_rgb_c_m_y_k_r_g_bmode2r}   rc   rp   s                            @@@rI   _handle_flater      s     IL +{+A*0L+B;+O(T5&wtQ'	tQ'
$T4
6Cj f24GHI__&Ff./**Ffc"]]_FA	Q " &( dAr*1-/NBd xx3!"R"6{>1#n4&A.AQQWXdWeefg$ %~/L(M"NN5f^_6MN&??OvVbUccde$ $O^4F$Sbk6"#;7
hh 
 #388A;/  oodCHHc:kk$'v;519"22"%=k]#KXV!FS[ XX&HAuaAY'7&HIF D V^D+38AVPQAQ<RTU3V+ 9BB !BH!5R#X!FG BH!5R#X!FG BH!5R#X!FGE2r2,$789 !XXd^F D%NN64N8++T[-D-D%Dc%PCZ0[^{5RVT:1=5=//%t4Cv~	i..5 'IQ  	vUV F	s   N	 N	N+*N+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|}nT|j                  |hdd
hk(  r0t        j                  ||j                  |j                               }n|j                  |      }|j                  d
k(  r|j                  d      }d}	||	||fS )zb
    Process image encoded in flateEncode
    Returns img, image_format, extension, inversion
    .jp2)JPEG2000formatsr   )r&   r%   r    r$   r#   r&   r   )r   openr   r?   r   r'   rE   r`   rL   tobytesr   )
rL   rK   rE   r)   rs   r   img1rF   rc   r   s
             rI   _handle_jpxr   "  s     I

74=-HD(fdCD,rzM499-y(yyFtu}yyDTYY-#s;
))T	vv.	. oodDIIt||~>ll4  xx6kk% Li55rJ   rc   x_object_objlfiltersrF   c                   	 |j                  t        j                  | j                  dk(  r"|t        j
                  t        j                  fv s|r-| j                  dk(  rddgt        | j                               z  nd       t        |t              r|d   j                         dk(  rd t        |t              r4|d   j                         dk(  rddgt        | j                               z  t        fdt        t                    D              s_g }t        dt              d	      D ]3  }|   	|d
z      |j                  	fdt        d      D               5 | j                  |      } | S )Nr&   r$   g      ?g        r   r1   r2   c              3   4   K   | ]  }|   |d z  k(    yw)r   Nr   )r]   idecodes     rI   r_   z _apply_decode.<locals>.<genexpr>d  s     %UQfQi1q5&8%Us   r   r	   c              3   R   K   | ]  }t        d |d z  z
  z  z   z           yw)g     o@N)round)r]   jdmaxdmins     rI   r_   z _apply_decode.<locals>.<genexpr>i  s2      FGeq5yD4K84?@As   $'   )r>   IADECODErE   FT
DCT_DECODE
JPX_DECODEr@   getbandsr8   r   r<   allrQ   extendpoint)
rc   r   r   r)   rF   lutr   r   r   r   s
          @@@rI   _apply_decoder   H  sL    
		 XXH0N$NS sc#,,.)	)
 F 	;,N%%':5;,N%%'=8sc#,,.11#%U%FBT%U"Uq#f+q) 	A!9D!a%=DJJ KPQT: 	 iinJrJ   c                 >   t         j                  | v r&| t         j                     t        j                  k(  rd}| j	                  dd      dk  r't        | j	                  dd       ddd      \  }}||fS t        ||dk(  rt        |      sd|vrd	n|d      \  }}||fS )
Nr    z/BitsPerComponentrO   rV   r   r   r	   Grayr   )r   COLOR_SPACEr   
DEVICE_RGBr>   r?   r   )r   rs   r)   rE   rF   s        rI   _get_mode_and_invert_colorr   p  s     	,&(K,B,BB $+Q/!3, 3Q78<a
l"  - !'4k1  
l rJ   x_objectpillow_parametersc                 
   dt         j                   dt        t        t        f   dt        dt        dt        dt        t         j                   t        t        f   fd}| | j
                  j                         n| j                         }t        t        | t        j                           t        t        | t        j                           f}| j                         }t        |t              r|j                         }t        |      |d	   |d
   z  z  d
k(  r|d   dk(  r|dd }| j!                  dd
      }| j!                  dt#                     j%                         }t        |t&              r!t        |      d
k(  r|d	   j%                         }t)        | ||      \  }}	| j!                  t*        j,                  t#                     j%                         }
t        |
t&              r|
d   n|
}| j!                  t*        j.                  d      }|rt        |t        t&        f      r|d	   }ni }t        |t              si }d}|t0        j2                  t0        j4                  fv rt7        ||||||      \  }}}}n~|t0        j8                  t0        j:                  fv r?|t0        j8                  k(  rd}d}nd}d}	 t        j<                  t?        |      d      }n|t0        jD                  k(  r#t        j<                  t?        |            dd}}}n|t0        jF                  k(  rtI        |||||      \  }}}}	n|t0        jJ                  k(  r*t        j<                  t?        |      d      dddf\  }}}}	n|t0        jL                  k(  r*t        j<                  t?        |      d      dddf\  }}}}	nE|dk(  rtC        |||      dddf\  }}}}	n)|dk(  rtO        d|        tC        |||      dddf\  }}}}	tQ        || |||	      } ||| |||      \  }}}|i }|dk(  rd|_)        d|vrd|d<   t?               }	  |jT                  |fd |i| |j[                         }	 t        j<                  t?        |            }|||fS # t@        $ r tC        |||      }Y w xY w# tV        $ r5 |jY                  d!      }d}d}t?               }|jU                  ||"       Y w xY w# t\        $ r}t_        d#| t`               d}Y d}~d}~ww xY w)$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]

    rc   r   rt   r   r   r-   c                    d }t         j                  |v rt        |t         j                           d   }| j                  |j                  k7  rt	        d| t
               nr|j                  dk7  r|j                  d      }| j                  dk(  r| j                  d      } n | j                  dk(  r| j                  d      } | j                  |       d|v rd}d	}nd
}d}| ||fS )Nr   z"image and mask size not matching: r$   r#   r    r   JPEGr   r   rw   rv   )	r   S_MASK_xobj_to_imagerL   r   rA   rE   r   putalpha)rc   r   rt   r   r   alphas         rI   _apply_alphaz$_xobj_to_image.<locals>._apply_alpha  s     99 "8BII#67:Exx5::%8F
 ::$!MM#.E88s?++e,CXX_++c*CU#%)"	$"	I|++rJ   Nr   r	   r   z/Colorsz/ColorSpacer   z.tiffrw   rv   )r   rw   r   r   z.jpg)r   F)rw   PPMr&   r   r   zColorSpace field not found in qualitykeepformatr%   )r   zFailed loading image: )1r   dictr9   r   tupleindirect_reference__repr__r   r=   r   WIDTHHEIGHTr   r8   r   r@   r>   r   r<   r:   r   r   FILTERDECODE_PARMSr   FLATE_DECODERUN_LENGTH_DECODEr   
LZW_DECODEASCII_85_DECODEr   r   r   rg   r   r   r   CCITT_FAX_DECODEJBIG2_DECODEr   r   r   saveOSErrorr   getvalue	Exceptionr   rA   )r   r   r   rt   rL   rK   rs   r)   rE   rF   filtersr   decode_parmsr   rc   r   _img_byte_arrr   	exceptions                       rI   r   r     s   &,[[,sCx., , 	,
 , 
u{{C$	%,D  	##,,.   hrxx()4Xbii5H+IJDD${{}
4yDGd1g%&!+RD0@CRy \\)Q'F||M:<@KKMK+t$[)9Q)>!!n//13HfkRD, ll+22JLALLNG($7wr{WH<< 0 = =tDL
<%?#AlD)IBOOR%9%9::*7+
'\9a 
bmmR%7%78	8 r}}$!LI LI	?**WT]ODC 
R]]	"',zz'$-'@&&9\	R]]	"5@$k66
2\9l 
R((	(JJwt}i8	6
2\9l 
R__	$JJwt}n=	6
2\9l 
&tT48	6
2\9l 
;H:FGG 'tT48	6
2\9l Xxl
KC#/X{L)$ CL  v 
--+1i( 9L5HlH6GH   "Djj' dCS & 	?,T4>C	?v  5{{6"	y		,|	45  /	{;XFs<   5 R  7R S  RR;SS	T&T  T)r   r\   )8__doc__sysior   typingr   r   r   r   r   _utilsr
   r   	constantsr   r   r   r   r   r   errorsr   r   genericr   r   r   r   r   r   version_infor   typing_extensionsPILr   r   ImportErrorr'   __annotations__r(   r=   r9   r:   r   boolr?   rR   rY   rg   rr   r   r   r   r   r   r   r   rJ   rI   <module>r      s+   7 
  6 6 < 4 ( , 5  BQ7" +1 #>y  %' c & 	O sDIs*+O O  O  	O 
 =$O dE sCx   $
38_,1
[[(Z ZsCc?Q9R Z$k/
S/k/
k/ k/ 	k/
 k/ k/ 5;;S$&'k/\#6
S/#6
#6 #6 	#6
 #6 5;;S$&'#6L%	%sCx.% % sDIs*+	%
 % [[%PsCx.*-<A#tCyRUBU<V
=$@ :>s sCx.s  c3h!56s  8C=%$%s c  
	= s   0F& &F4