
    @wg6                        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# 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 Z.de	e(e(f   de,de%de)d!e(d"e)de	e"jD                  e)e)e*f   fd#Z/de	e(e(f   de,de%de)d!e(de	e"jD                  e)e)e*f   fd$Z0d%e"jD                  d&ee)ef   d'ede
e)ee   ef   d(e*de"jD                  fd)Z1d&ee)ef   d!e(de
e)ee   ef   de	e%e*f   fd*Z2y# e$$ r	  e$d      w xY w),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         kD  rt        d      t        | t              ryt        | t              rnt        | t
              st        d|       | d   j                  d      rd| d   dd z   } nE| d   d	k(  r:| 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   } t        | t              r| j                         } t        | |||d
z         \  }}|dfS | d   dk(  r}| }t        | d
         }| d   } t        | t              r| 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 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
             P/var/www/horilla/myenv/lib/python3.12/site-packages/pypdf/_xobj_image_helpers.pyr?   r?   )   s    ++j
 	
 +z*+s#T*);
 	
 
Q	"	"6	*+a."44	Q;	&!!n//1[%67!oolB7	Q:	%!!n//1,)9eai
| O#El""	Q=	(!!nk>2%002K,)9eai
| d{	Q:	%*{1~.!!nk>2%002K-',<,A#A&q)X51!4Q788pq ,)9eai
| 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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Qwa$h			 <rJ   rH   c                    	 t        j                  | ||      }|S # t        $ r}|d   |d   z  }t        |      }|dk(  rt	        d      |||z  dk7  r||t        |       z  |z  }dj                  |D cg c]  }t        |ft        |      z         nc c}w c}      }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   )r   	frombytes
ValueErrorr@   r   joinrR   r=   )	rH   rL   rK   imgexcnb_pixdata_lengthkrX   s	            rI   _extended_image_frombytesrc      s    0oodD$/ J  0a47"$i!%K 1$ISY,xxt<!tc!f}-<<=oodD$/J0s!    	CAB>5B
$B>>C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(  rddlm} t        t        t        f      rj                         t        |      rj                  t        t              rj                         	 ddddddt        dd      d      \  }}}|
j                  dk(  r#d|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'                  t)        |
j*                  d         D cg c]R  }dj'                  t)        |
j*                  d         D cg c]  }||
j-                  ||f      dkD  rdnd   ! c}      T c}}      }t/        j0                  ||
j*                  |      }
n@|
j3                  |      }
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 ]{  \  }}}}t5        d d|d z  z
  z  d|d z  z
  z        }t5        d d|d z  z
  z  d|d z  z
  z        }t5        d d|d z  z
  z  d|d z  z
  z        }|j7                  t#        |||f             } dj'                  |      d}|
j9                  |!       |
j3                  |t:        j<                  k(  rdnd      }
nDt        |t@              s4|d   d$k(  r,t        |||      d   }||k7  rt/        j0                  || |      }
|dk(  rd%}d&}|
||d'fS c c}w c c}}w c c}w # t>        $ r t        d" d#t                dY @w xY w)(zh
    Process image encoded in flateEncode
    Returns img, image_format, extension, color inversion
    z.pngPNGr   r1   c              3   <   K   | ]  }|j                           y w)N)r<   ).0values     rI   	<genexpr>z _handle_flate.<locals>.<genexpr>   s     +X5E,<,<,>+Xs   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      zInvalid Lookup Table in r$   r    r&   c              3   .   K   | ]  }||d z      yw)r/   N )ri   nlookups     rI   rk   z _handle_flate.<locals>.<genexpr>   s!      +./q1q5)+s      )rawmodezBase z8 not coded please share the pdf file with pypdf dev teamr0   z.tifTIFFF)!r8   r   rY   rc   genericrl   r   r   get_dataoriginal_bytesr9   encoder?   rH   r@   r   rA   rR   r   r]   rQ   rL   getpixelr   r[   convertr=   append
putpaletter   DEVICE_GRAYKeyErrorr   )rL   rK   rH   r)   rd   re   	extensionimage_formatbasehivalr^   rl   nbconvexpected_countactual_count
colors_arrrW   rX   arrb_rgb_c_m_y_k_r_g_brD   rr   s                                 @rI   _handle_flater      s    IL +{+A*0L+XK+X(T5&wtQ'	tQ'
#D$
5Cj -f24GHI__&Ff./**Ffc"]]_FE	Q " &( T1b)!,.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 "'sxx{!3   */sxx{);$% !+aV0Ds0J1PQ R
 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 {FD9!<5=//%t4Cv~	i..W$ 'IY  	vUV F	s0   O' *O
$O)	O
,O"O
'P	P	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
    z.jp2)JPEG2000)formatsr   )r&   r%   r    r$   r#   r&   r   )r   openr   r?   r
   r'   rH   r[   rL   tobytesr{   )
rL   rK   rH   r)   rd   r   img1rE   r^   r   s
             rI   _handle_jpxr     s     I::gdm];D'VTBD,rzM499-y(yyFtu}yyDTYY-#s;
))T	vv.	. oodDIIt||~>ll4  xx6kk% Li55rJ   r^   x_object_objlfiltersrE   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   Nrp   )ri   idecodes     rI   rk   z _apply_decode.<locals>.<genexpr>W  s     %UQfQi1q5&8%Us   r   r   c              3   R   K   | ]  }t        d |d z  z
  z  z   z           yw)g     o@N)round)ri   jdmaxdmins     rI   rk   z _apply_decode.<locals>.<genexpr>\  s2      FGeq5yD4K84?@As   $'   )r>   IADECODErH   FT
DCT_DECODE
JPX_DECODEr@   getbandsr8   r   r<   allrQ   extendpoint)
r^   r   r   r)   rE   lutr   r   r   r   s
          @@@rI   _apply_decoder   ;  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                 H   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        |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   rd   r)   rH   rE   s        rI   _get_mode_and_invert_colorr   c  s     	,&(K,B,BB $+Q/!3+ 3Q78<a
l"  , !";
;k1  
l rJ   )r   )3__doc__sysior   typingr   r   r   r   r   r	   r
   _utilsr   r   	constantsr   r   r   r   r   errorsr   r   rv   r   r   r   r   r   version_infor   typing_extensionsPILr   r   ImportErrorr'   __annotations__r(   r=   r9   boolr?   rR   rY   rc   r   r   r   r   rp   rJ   rI   <module>r      s   ? 
  ? ? ? < " ( , 5  BQ7" +1 #>y  %' c & 	N sDIs*+N N  N  	N 
 =$N bE sCx   $
38_,1
[[(r/
S/r/
r/ r/ 	r/
 r/ r/ 5;;S$&'r/j#6
S/#6
#6 #6 	#6
 #6 5;;S$&'#6L%	%sCx.% % sDIs*+	%
 % [[%PsCx.*-<A#tCyRUBU<V
=$O
  
	= s   0E3 3F