
    j:j\                        % S r SSKrSSKJr  SSKJrJrJrJrJ	r	  SSK
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JrJr  SSKJrJrJrJrJrJr  \R>                  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r0S\*S\,\)\)4   S\/S\#RF                  4S jr1S\S\,\\\\4   4S  jr2S\,\)\)4   S\/S\&S\\*\4   S!\)S"\*S\,\#RF                  \*\*\-4   4S# jr3S\,\)\)4   S\/S\&S\*S!\)S\,\#RF                  \*\*\-4   4S$ jr4S%\#RF                  S&\5\*\4   S'\S\\*\+\   \4   S(\-S\#RF                  4S) jr6S&\5\*\4   S!\)S\\*\+\   \4   S\,\&\-4   4S* jr7 S.S&\5\*\4   S+\\5\*\4   S4   S\,\\*   \/\4   4S, jjr8g! \% a	    \%" S5      ef = f)/z1Functions 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                 &   U[         :  a  [        S5      e[        U 5      (       a  gSn[        U [        5      (       a  U nGOh[        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  ae  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9  g[        XAX#S-   5      u  pgXg4$ SSSSSSSS .n	[        U	R                  5       5      n
U	R                  U5      =(       d(    SUs=::  a  [        U
5      :  a  O  OX   OS	=(       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	/ICCBased   z/Nz
/Alternate/Indexed)r    r&   r#   /Separationr	   Tz/DeviceN/DeviceCMYKz/BlackzGColor %(color)s converted to Gray. Please share PDF with pypdf dev team)sourcecolor)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_mapmode_valuess              R/var/www/website/venv/lib/python3.13/site-packages/pypdf/generic/_image_xobject.pyrB   rB   *   sw    ++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]#.q1!4
 ,y!)
 !! *H x()K_% 	 $7s;'77 )		  	     datasizebitsc                    SSK Jn  US   US   -  nXC:  a  [        SU SU S35      e[        U5      nSU-  S-
  nUS   US   U-  S-   S-  -  n[	        U 5      =o:  a  [        S	[        S
9  U SXx-
  -  -  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-  X\XS   -  -   '   X-  n
U
S:  d  M#  U	S-  n	SU-
  n
M/     MW     [        U5      $ )Nr   FLATE_MAX_BUFFER_SIZEr1   zRequested buffer size z exceeds limit of .      z.Image data is not rectangular. Adding padding.)r5       )	pypdf.filtersrT   r   	bytearrayrC   r   rD   rangebytes)rO   rP   rQ   rT   buffer_sizebyte_buffermaskrequiredlength
data_indexbityxs                rM   	bits2byterf      s;   3q'DG#K*"8EWXmWnno pqqK(KI?DAw47T>A-!34Hd)'GPXY8,--J
d(C47^!d(?!OJd(CtAwA,0,<,Ct+KKAQK(KCQwa
$h  	  rN   rH   c                   ^
 US   US   -  n[        U 5      nX4-  nSSKJn  XV:  a  [        SU SU S35      e [        R
                  " XU5      nU$ ! [         ag  n[        U5      n	U	S:X  a  [        S5      UeX-  S:w  a  e XY-  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   r1   rS   zRequested image buffer size z exceeds limit rU   z9Data is 0 bytes, cannot process an image from empty data.rN   c              3   T   >#    U  H  n[        U4[        T5      -  5      v   M     g 7fN)r\   r@   ).0re   ks     rM   	<genexpr>$_image_from_bytes.<locals>.<genexpr>   s#     ;dqdSVm,,ds   %()	rC   rY   rT   r   r   	frombytes
ValueErrorr   join)rH   rP   rO   pixel_countbytes_per_pixelrequired_byte_countrT   imgexcdata_lengthrk   s             @rM   _image_from_bytesrw      s     q'DG#K$iO%732*+>*?OdNeefg
 	
0ood$/ J  
0$i!%K $)-xx;d;;ood$/J
0s   A 
CAB??C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ri   )r?   )rj   values     rM   rl   *__handle_flate__indexed.<locals>.<genexpr>   s     +XK5,<,<,>,>Ks   r1   r    r   r	   z(Expected color space with 4 values, got z: )rC   r;   r<   r?   splitr@   r   )r)   countbasehivallookupelement1s         rM   __handle_flate__indexedr      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YrN   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      n
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U
R                  S:X  a  US:X  a  [        S[        US9  GO:U
R                  S:X  a  SU-  n[!        T5      nX:w  aR  X:  a%  [        S[        UUS9  T[#        S/X-
  -  5      -  mO#[%        TUS 5      (       d  [        S[        UUS9  TSU mTSU TUS /nU
R'                  S5      n[)        US   US   5       VVs/ s H"  u  nnUR+                  U/S-  U/S-  -   5      PM$     nnnUS:X  a  US   O[,        R.                  " UU5      n
GOCU
R'                  U5      n
[!        T5      W	S-   U-  :w  a  [        S[        US9  SmOUS:X  a1  SR1                  T Vs/ s H  n[#        UUU/5      PM     sn5      mSnOUS:X  a  / nU4S j[3        SS	[!        T5      S	-  -  S	5       5        H|  u  nnnn[5        S SUS -  -
  -  SUS -  -
  -  5      n[5        S SUS -  -
  -  SUS -  -
  -  5      n[5        S SUS -  -
  -  SUS -  -
  -  5      nUR7                  [#        UUU45      5        M~     SR1                  U5      mSnTb  U
R9                  TUS!9  U
R'                  U[:        R<                  :X  a  SOS5      n
OK[A        U5      (       d;  US   S#:X  a2  US:w  a,  [        X4U5      S   nUU:w  a  [,        RB                  " X U5      n
US:X  a  S$nS%nXUS&4$ s  snnf s  snf ! [>         a    [        S"[        WS9  Sm N7f = f)'z\
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`Cannot apply lookup for base %(base)s to image with mode 1. Please share PDF with pypdf dev team)r5   r   zLNot enough lookup values: Expected %(expected_count)d, got %(actual_count)d.)r5   expected_countactual_countNzJToo many lookup values: Expected %(expected_count)d, got %(actual_count)d.r$   r1      z'Invalid Lookup Table in %(obj_as_text)sr5   r   rN   r    r&   c              3   2   >#    U  H  nTXS -    v   M     g7f)r/   N )rj   nr   s     rM   rl    _handle_flate.<locals>.<genexpr>4  s      +3Vaqq5)3Vs      )rawmodez=Base %(base)s not coded. Please share PDF with pypdf dev teamr0   .tifTIFFF)"r;   r   r   rf   rw   r   r   get_datar   original_bytesr<   encoderB   rH   r   rD   rC   r\   r
   convertzippointr   mergerp   r[   r@   append
putpaletter   DEVICE_GRAYKeyErrorr   rn   )rP   rO   rH   r)   r   r   	extensionimage_formatr   r   rt   nbconvr   r   
colors_arrr5   	low_value
high_valuebandsb_rgb_c_m_y_k_r_g_bmode2r   s                                 @rM   _handle_flater      sp    IL +{++A*0L+B;+O(5&wQ'	Q'
D
-Cj f24GHII__&Ff.//**Ffc""]]_FO	Q " &( dAr*1-/NBd xx327 ;#	 S!"R"6{1#4&j#++9)5	 %~/L(M"NN5f^_6MNN&h#++9)5	 $O^4F$Sbk6"#;7
S)
 25Z]JqM1R	 2S-	: LL"c)ZL3,>> 2S	   #%'eAhu{{4/Gkk$'v;519"22"#LU]kvw!FS[ XX&HAuaAY'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[))k!n.K
 3;#K>qAEu}ood$7v~	i..[ 'Im  	O
 F	s   !O+ )O (O&+P	P	c                 *   Sn[         R                  " [        U5      SS9n[        X4U5      u  p'US:X  a  [	        [
        UR                  5      nUS:H  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S
:X  a  UR                  S5      nSn	XXW4$ )zW
Process image encoded as JPX/JPEG2000
Returns img, image_format, extension, inversion
.jp2)JPEG2000formatsr   r&   r%   r    r$   r#   r0   r   )r   openr   rB   r   r'   rH   rn   rP   tobytesr   )
rP   rO   rH   r)   r   r   img1rI   rt   r   s
             rM   _handle_jpxr   P  s     I

74=-HD(dCDrzM499-v~yyFtu}yyDTYY-#s;
))T	vv.	. oodIIt||~>ll4  xx6k[8kk% Li55rN   rt   x_objectlfiltersrI   c                   ^^^	 [         R                  U;   a  U[         R                     mOU R                  S:X  a@  U[        R                  :X  a,  U(       d  SS/OSS/mT[        U R                  5       5      -  mO\U R                  S:X  a  U[        R                  :X  d  U(       a/  U R                  S:X  a  SS/[        U R                  5       5      -  mOS 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&   g      ?g        r$   r   r2   r3   c              3   :   >#    U  H  nTU   US -  :H  v   M     g7f)r	   Nr   )rj   idecodes     rM   rl    _apply_decode.<locals>.<genexpr>  s      %UBTQfQi1q5&8BTs   r	   r1   c              3   X   >#    U  H  n[        S US -  TT-
  -  T-   -  5      v   M!     g7f)g     o@N)round)rj   jdmaxdmins     rM   rl   r     s3      KUaeq5yD4K84?@AA:s   '*   )IADECODErH   FT
JPX_DECODErC   getbands
DCT_DECODEr;   r   r?   allr[   extendr   )
rt   r   r   r)   rI   lutr   r   r   r   s
          @@@rM   _apply_decoder   u  s    
yyH"))$ 
V	BMM 9#/#sc3Z#clln--
((f
R]]!:QTQYQY]`Q`sc#,,.11 	;,,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JrN   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/BitsPerComponentrW   rc   r   r   r1   Grayr	   )r   COLOR_SPACEr   
DEVICE_RGBrA   rB   r   )r   r   r)   rH   rI   s        rM   _get_mode_and_invert_colorr     s     	("R^^$(>(>> $||'+a/,||/34C8!R
"  - !'44k1  
 rN   pillow_parametersc                 0
   S[         R                   S[        [        [        4   S[        S[        S[        S[        [         R                   [        [        4   4S jnU c  U R
                  R                  5       OU R                  5       n[        [        U [        R                     5      [        [        U [        R                     5      4nU R                  5       n[        U[        5      (       a  UR                  5       n[        U5      US	   US
   -  -  S
:X  a  US   S:X  a  USS nU R!                  SS
5      nU R!                  S[#        5       5      R%                  5       n[        U[&        5      (       a"  [        U5      S
:X  a  US	   R%                  5       n[)        XU5      u  pU R!                  [*        R,                  [#        5       5      R%                  5       n
[        U
[&        5      (       a  U
S   OU
nU R!                  [*        R.                  5      nU(       a!  [        U[        [&        45      (       a  US	   nO0 n[        U[        5      (       d  0 nSnU[0        R2                  [0        R4                  4;   a  [7        UUUUUU5      u  pnnGOsU[0        R8                  [0        R:                  4;   a>  U[0        R8                  :X  a  SnSnOSnSn [         R<                  " [?        U5      SS9nGOU[0        RD                  :X  a#  [         R<                  " [?        U5      5      SSpnOU[0        RF                  :X  a  [I        XEXU5      u  ppOU[0        RJ                  :X  a&  [         R<                  " [?        U5      SS9SSS4u  ppO{U[0        RL                  :X  a&  [         R<                  " [?        U5      SS9SSS4u  ppOAUS:X  a  [C        XU5      SSS4u  ppO'US:X  a  [O        SU  35      e[C        XU5      SSS4u  pp[Q        XXU	5      nU" XX?U5      u  pnUc  0 nUS:X  a  SUl)        SU;  a  SUS'   [?        5       n URT                  " U4S U0UD6  UR[                  5       n [         R<                  " [?        U5      5      nXU4$ ! [@         a    [C        XU5      n Nf = f! [V         a2    URY                  S!5      nSnSn[?        5       nURU                  UUS"9   Nf = f! [\         a  n[_        S#[`        US$9  Sn SnANSnAff = f)%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]

rt   r   r   r   r   r-   c                    S n[         R                  U;   a  [        U[         R                     5      S   nU R                  UR                  :w  a  [	        S[
        US9  OuUR                  S:w  a  UR                  S5      nU R                  S:X  a  U R                  S5      n O!U R                  S:X  a  U R                  S5      n U R                  U5        SU;   a  S	nS
nOSnSnXU4$ )Nr	   z1image and mask size not matching: %(obj_as_text)sr   r$   r#   r    r   JPEGr   r   r   r   )	r   S_MASK_xobj_to_imagerP   r   rD   rH   r   putalpha)rt   r   r   r   r   alphas         rM   _apply_alpha$_xobj_to_image.<locals>._apply_alpha  s     99 "8BII#67:Exx5::%G# + ::$!MM#.E88s?++e,CXX_++c*CU#%)"	$"	|++rN   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: %(exception)s)r5   	exception)1r   dictr<   r   tupleindirect_reference__repr__r   r@   r   WIDTHHEIGHTr   r;   r   rC   rA   r   r?   r=   r   r   FILTERDECODE_PARMSr   FLATE_DECODERUN_LENGTH_DECODEr   
LZW_DECODEASCII_85_DECODEr   r   r   rw   r   r   r   CCITT_FAX_DECODEJBIG2_DECODEr   r   r   saveOSErrorr   getvalue	Exceptionr   rD   )r   r   r   r   rP   rO   r   r)   rH   rI   filtersr   decode_parmsr   rt   r   _img_byte_arrr   r   s                       rM   r   r     s   &,[[,sCx., , 	,
 , 
u{{C$	%,H  	##,,.   hrxx()4Xbii5H+IJDD${{}
4yDGd1g%&!+RD0@CRy \\)Q'F||M:<@KKMK+t$$[)9Q)>!!n//13HkRD ll+22JLALLNG($77wr{WH<< 0 = =>L
<%??#AlD))IBOOR%9%9::*7+
'9a 
bmmR%7%78	8 r}}$!LI LI	6**WT]ODC 
R]]	"',zz'$-'@&&99	R]]	"5@66
29l 
R((	(JJwt}i8	6
29l 
R__	$JJwt}n=	6
29l 
d$/	6
29l 
;H:FGG d$/	6
29 xl
KC#/{)$ CL  v 
--+1i( 9L5HlH6GH   "Djj' CS & 	6#D5C	6v  5{{6"	y		,|	45  <XYbcs<   R R1 2S0 R.-R.19S-,S-0
T:TT)r   ri   )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   boolrB   r\   rf   rw   r   r   r   r   r   r   r   r   rN   rM   <module>r     s7   7 
  6 6 = 5 ) - I I  BQ7" +1 #>y  %' c & 	U sDIs*+U U  U  	U 
 =$U pE sCx   <
38_,1
[[:Z ZsCc?Q9R Z$~/
S/~/
~/ ~/ sK'(	~/
 ~/ ~/ 5;;S$&'~/B"6
S/"6
"6 "6 	"6
 "6 5;;S$&'"6J(	(38n( ( sDIs*+	(
 ( [[(V38n&)8=c49c>Q8R
=$@ :>u sCx.u  c3h!56u  8C=%$%u C  
	= s   3F9 9G