
    i9                     4   % S r SSKrSSKJr  SSKJrJrJrJr  SSK	J
r
Jr  SSKJr  SSKJr  SS	KJr  SS
KJrJr  SSKJrJrJrJrJrJr  \R8                  SS S:  a  SSKJr  OSSKJr   SSKJ r J!r!  \S   r#\\$S'   Sr%\&\$S'    S,S\\'\(\   \4   S\&S\#S\&S\)\#\*4   4
S jjr+S\,S\)\&\&4   S\&S\,4S jr-S\'S\)\&\&4   S\,S\ R@                  4S  jr.S\S\)\\\\4   4S! jr/S\)\&\&4   S\,S\#S\'S"\&S#\'S\)\ R@                  \'\'\*4   4S$ jr0S\)\&\&4   S\,S\#S\'S"\&S\)\ R@                  \'\'\*4   4S% jr1S&\ R@                  S'\2\'\4   S(\S\\'\(\   \4   S)\*S\ R@                  4S* jr3S'\2\'\4   S"\&S\\'\(\   \4   S\)\#\*4   4S+ jr4g! \" a	    \"" S5      ef = f)-z9Code in here is only used by pypdf.filters._xobj_to_image    N)BytesIO)AnyLiteralUnioncast   )check_if_whitespace_onlylogger_warning)ColorSpaces)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                    U[         :  a  [        S5      e[        U 5      (       a  gSn[        U [        5      (       a  U nGOm[        U [
        5      (       d  [        SU 5      eU (       d  gU S   R                  S5      (       a  SU S   SS	 -   nGOU S   S
:X  a9  U S   R                  5       n[        [        US   5      nUR                  SS5      nOU S   S:X  a/  U S   R                  5       n[        XAX#S-   5      u  pgUS;   a  SnXg4$ U S   S:X  a(  U S   R                  5       n[        XAX#S-   5      u  pgUS4$ U S   S:X  aj  U n[        U S   5      nU S   R                  5       nUS:X  a-  US:X  a'  US   S   S:w  a  [        SUS   S    S3[        5        g[        XAX#S-   5      u  pgXg4$ SSSSSSSS .n	U	R                  U5      =(       d%    [        U	R                  5       5      U   =(       d    UnXfS:H  4$ )!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
/DeviceRGBr1   2bit4bit)r&   r   r   
isinstancestrlist
startswith
get_objectr   intget_get_imagemodelenr
   __name__values)
r'   r(   r)   r*   color_space_stricc_profilemodeinvert_colororiginal_color_spacemode_maps
             S/home/james-whalen/.local/lib/python3.13/site-packages/pypdf/_xobj_image_helpers.pyr=   r=   *   sb    ++l
 	
 {##O+s##%T***K
 	
 	Q	"	"6	*	*#k!nQR&88	Q;	&!!n//1[%67%//,;	Q:	%%a.335+y!)
 ?"D!!	Q=	(%a.335+y!)
 Tz	Q:	%*{1~.%a.335m+0@A0E#A&q)X51!4Q788pq +y!)
 !! *H 	_% 	!"#34	 	     datasizebitsc                 ,   SU-  S-
  n[        US   US   -  5      nSnSU-
  n[        US   5       HU  nUSU-
  :w  a
  US-  nSU-
  n[        US   5       H-  nX   U-	  U-  XHXqS   -  -   '   Xb-  nUS:  d  M#  US-  nSU-
  nM/     MW     [        U5      $ )Nr   r      )	bytearrayrangebytes)	rI   rJ   rK   maskbyte_buffer
data_indexbityxs	            rG   	bits2byterW   |   s    I?DDGd1g-.KJ
d(C47^!d(?!OJd(CtAwA,0,<,Ct+KKAQK(KCQwa
$h  	  rH   rC   c                 R  ^  [         R                  " XU5      nU$ ! [         a  nUS   US   -  n[        U5      nUS:X  a  [	        S5      UeXe-  S:w  a  UeU[        U 5      -  U-  mSR                  U4S jU 5       5      n[         R                  " XU5      n S nAU$ S nAff = f)Nr   r   z9Data is 0 bytes, cannot process an image from empty data.rH   c              3   T   >#    U  H  n[        U4[        T5      -  5      v   M     g 7fN)rP   r;   ).0rV   ks     rG   	<genexpr>,_extended_image_frombytes.<locals>.<genexpr>   s#     ;dqdSVm,,ds   %()r   	frombytes
ValueErrorr>   r   join)rC   rJ   rI   imgexcnb_pixdata_lengthr\   s          @rG   _extended_image_frombytesrf      s    0ood$/ J  0a47"$i!%K 1$ISY,xx;d;;ood$/J0s    
B&A5B!!B&c                 d   [        U 5      nUS:X  a  S U  5       u  pp4XX44$ U S   n[        U[        5      (       a  UOUR                  5       nUS:X  aM  SU;   aG  U S   R                  5       U S   R                  5       p@UR	                  S5      u  p#[        U5      nXX44$ [        SU S	U  35      e)
Nr-   c              3   @   #    U  H  oR                  5       v   M     g 7frZ   )r:   )r[   values     rG   r]   *__handle_flate__indexed.<locals>.<genexpr>   s     +XK5,<,<,>,>Ks   r   r    r   r   z(Expected color space with 4 values, got z: )r>   r6   r7   r:   splitr;   r   )r'   countbasehivallookupelement1s         rG   __handle_flate__indexedrr      s    Ez+XK+X(5%// 1~H%h44x(:M:M:OHzf()!n779;q>;T;T;VVnnV,E
%//
A%;-X
YYrH   colorsobj_as_textc           
        ^^^ SnSn[        U[        5      (       a  US   S:X  a  [        U5      u  p8n	mUS:X  a  Sn[        XS5      nOUS:X  a  Sn[        XS	5      n[	        X U5      mUS:X  Ga  [        T[
        [        45      (       a  TR                  5       m[        T[        5      (       a  TR                  m[        T[        5      (       a  TR                  5       m S
SS
SSS.[        WSS5      S      u  pnTR                  S:X  a  SU
-  n[        T5      nX:w  a`  X:  a,  [        SU SU S3[         5        T[#        S/X-
  -  5      -  mO*[%        TUS 5      (       d  [        SU SU S3[         5        TSU mTSU
 TU
S /mSR'                  UU4S j[)        TR*                  S   5       5       5      n[,        R.                  " UTR*                  U5      mGOFTR1                  U5      m[        T5      W	S-   U
-  :w  a  [        SU 3[         5        SmOUS:X  a0  SR'                  T Vs/ s H  n[#        XU/5      PM     sn5      mSnOUS:X  a  / nU4S j[)        SS	[        T5      S	-  -  S	5       5        H|  u  nnnn[3        SSUS-  -
  -  SUS-  -
  -  5      n[3        SSUS-  -
  -  SUS-  -
  -  5      n[3        SSUS-  -
  -  SUS-  -
  -  5      nUR5                  [#        UUU45      5        M~     SR'                  U5      mSnTb  TR7                  TUS9  TR1                  U[8        R:                  :X  a  SOS5      mOJ[        U[>        5      (       d5  US   S":X  a,  [        X4U5      S   nUU:w  a  [,        R.                  " UX5      mUS:X  a  S#nS$nTXvS%4$ s  snf ! [<         a    [        S W S!3[         5        Sm N6f = f)&z\
Process image encoded in flateEncode
Returns img, image_format, extension, color inversion
z.pngPNGr   r/   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 rH   c              3      >^#    U  H8  mS R                  UUU4S j[        TR                  S   5       5       5      v   M:     g7f)rH   c              3   `   >#    U  H#  nTTR                  UT45      S :  a  SOS   v   M%     g7f)   r   r   N)getpixel)r[   rV   
colors_arrrb   rU   s     rG   r]   *_handle_flate.<locals>.<genexpr>.<genexpr>   s3      !3A #aV(<s(B1J!3s   +.r   N)ra   rO   rJ   )r[   rU   r|   rb   s    @rG   r]    _handle_flate.<locals>.<genexpr>   sD      
 0	 HH !&sxx{!3   0s   A Ar   zInvalid Lookup Table in r"   r   r$   c              3   2   >#    U  H  nTXS -    v   M     g7f)r-   N )r[   nrp   s     rG   r]   r~     s      +3Vaqq5)3Vs      )rawmodezBase z8 not coded please share the pdf file with pypdf dev teamr.   z.tifTIFFF) r6   r   rr   rW   rf   r   r   get_datar   original_bytesr7   encoder=   rC   r>   r
   r?   rP   r	   ra   rO   rJ   r   r_   convertr;   append
putpaletter   DEVICE_GRAYKeyErrorr   )rJ   rI   rC   r'   rs   rt   	extensionimage_formatrn   ro   nbconvexpected_countactual_countarrb_rgb_c_m_y_k_r_g_bmode2r|   rb   rp   s                            @@@rG   _handle_flater      s    IL +{++A*0L+B;+O(5&wQ'	Q'
#D
5Cj f24GHII__&Ff.//**Ffc""]]_FA	Q " &( T1b)!,.NBd xx3!"R"6{1#4&A.AQQWXdWeefg$ %~/L(M"NN5f^_6MNN&??OvVbUccde$ $O^4F$Sbk6"#;7
hh 
 #388A;/  oodCHHc:kk$'v;519"22"%=k]#KXV!FS[ XX&HAuaAY'7&HIF D V^D+38AVPQAQ<RTU3V+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+ !XXd^F D%NN64N8++T[-D-D%Dc%PCZ00[^{5R {D9!<5=//%4Cv~	..7 'IQ  	vUV F	s   #N0 5N+0 OOc                    Sn[         R                  " [        U5      SS9n[        X4U5      u  p'US:X  a  [	        [
        UR                  5      nUS;   nUR                  S:X  a  US:X  a  SnUR                  U:X  d  UR                  U1SS	1:X  a  UnOUUR                  U1SS
1:X  a0  [         R                  " X&R                  UR                  5       5      nOUR                  U5      nUR                  S
:X  a  UR                  S5      nSn	XXW4$ )zV
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%   rC   r_   rJ   tobytesr   )
rJ   rI   rC   r'   rs   r   img1rD   rb   r   s
             rG   _handle_jpxr   #  s     I::gdm];D'TBDrzM499-y(yyFtu}yyDTYY-#s;
))T	vv.	. oodIIt||~>ll4  xx6kk% Li55rH   rb   x_object_objlfiltersrD   c                 0  ^^^	 UR                  [        R                  U R                  S:X  a$  U[        R
                  [        R                  4;   d  U(       a.  U R                  S:X  a  SS/[        U R                  5       5      -  OS 5      m[        U[        5      (       a  US   R                  5       S:X  a  S m[        U[        5      (       a5  US   R                  5       S:X  a  SS/[        U R                  5       5      -  mTb  [        U4S j[        [        T5      5       5       5      (       db  / n[        S[        T5      S	5       H5  nTU   m	TUS
-      mUR                  UU	4S j[        S5       5       5        M7     U R                  U5      n U $ )Nr$   r"   g      ?g        r   r/   r0   c              3   :   >#    U  H  nTU   US -  :H  v   M     g7f)r   Nr   )r[   idecodes     rG   r]    _apply_decode.<locals>.<genexpr>e  s      %UBTQfQi1q5&8BTs   r   r   c              3   X   >#    U  H  n[        S US -  TT-
  -  T-   -  5      v   M!     g7f)g     o@N)round)r[   jdmaxdmins     rG   r]   r   j  s3      KUaeq5yD4K84?@AA:s   '*   )r<   IADECODErC   FT
DCT_DECODE
JPX_DECODEr>   getbandsr6   r   r:   allrO   extendpoint)
rb   r   r   r'   rD   lutr   r   r   r   s
          @@@rG   _apply_decoder   I  sP    
		 XXH0N$NS sc#,,.)	)
 F 	;,,N%%':5;,,N%%'=8sc#,,.11#%U%FBT%U"U"Uq#f+q)A!9D!a%=DJJ KPQT:  * iinJrH   c                 N   [         R                  U ;   a'  U [         R                     [        R                  :X  a  SnU R	                  SS5      S:  a%  [        U R	                  SS5       S3SS5      u  p4X44$ [        UUS:X  a  [        U5      (       d  SU;  a  S	OUS5      u  p4X44$ )
Nr   z/BitsPerComponentrM   rT   r   r   r   Grayr   )r   COLOR_SPACEr   
DEVICE_RGBr<   r=   r   )r   rs   r'   rC   rD   s        rG   _get_mode_and_invert_colorr   q  s     	,&(K,B,BB $+Q/!3+ 3Q78<a
"  , !'44k1  
 rH   )r   )5__doc__sysior   typingr   r   r   r   _utilsr	   r
   	constantsr   r   r   r   r   errorsr   r   genericr   r   r   r   r   r   version_infor   typing_extensionsPILr   r   ImportErrorr%   __annotations__r&   r;   r7   r8   tupleboolr=   rP   rW   rf   rr   r   r   dictr   r   r   rH   rG   <module>r      s   ? 
  , , < " ( , 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$l/
S/l/
l/ l/ 	l/
 l/ l/ 5;;S$&'l/^#6
S/#6
#6 #6 	#6
 #6 5;;S$&'#6L%	%sCx.% % sDIs*+	%
 % [[%PsCx.*-<A#tCyRUBU<V
=$i
  
	= s   -F F