
    Z?iV                     |   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$ 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#jF                  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#jF                  e*e*e-f   fd#Z3de,e)e)f   de/de&de*d!e)de,e#jF                  e*e*e-f   fd$Z4d%e#jF                  d&e5e*ef   d'edee*e+e   ef   d(e-de#jF                  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-Z8y# e%$ r	  e%d      w xY w)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         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	/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
             R/var/www/html/qr/venv/lib/python3.12/site-packages/pypdf/generic/_image_xobject.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   ddl m} |d   |d   z  }||kD  rt        d| d| d      t        |      }d|z  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   )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^   |   s   3q'DG#K**"8EWXmWnno p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                 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   r1   z9Data is 0 bytes, cannot process an image from empty data.rK   c              3   N   K   | ]  }t        |ft              z          y wN)rV   r>   ).0r]   ks     rJ   	<genexpr>z-_extended_image_from_bytes.<locals>.<genexpr>   s      ;qdSVm,;s   "%)r   	frombytes
ValueErrorrA   r   join)rF   rM   rL   imgexcnb_pixdata_lengthrc   s          @rJ   _extended_image_from_bytesrl      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ra   )r=   )rb   values     rJ   rd   z*__handle_flate__indexed.<locals>.<genexpr>   s     +X5E,<,<,>+Xs   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+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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(  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?        |      s9|d   d"k(  r1|dk7  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   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   | ]6  d j                  fdt        j                  d         D               8 yw)rK   c              3   X   K   | ]!  }j                  |f      d kD  rdnd    # yw)   r1   r   N)getpixel)rb   r]   
colors_arrrh   r\   s     rJ   rd   z*_handle_flate.<locals>.<genexpr>.<genexpr>   s4       #aV(<s(B1Js   '*r   N)rg   rU   rM   )rb   r\   r   rh   s    @rJ   rd   z _handle_flate.<locals>.<genexpr>   s>      
 	 HH !&sxx{!3 s   <A r1   zInvalid Lookup Table in r$   r    r&   c              3   .   K   | ]  }||d z      yw)r/   N )rb   nru   s     rJ   rd   z _handle_flate.<locals>.<genexpr>  s!      +./q1q5)+s      )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b_rgb_c_m_y_k_r_g_bmode2r   rh   ru   s                            @@@rJ   _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[)k!n.K
 3;#K>qAEu}oodD$7v~	i..? '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k(  }|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|d
k(  r|j                  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   -  s    I

74=-HD(fdCD,rzM499-v~yyFtu}yyDTYY-#s;
))T	vv.	. oodDIIt||~>ll4  xx6k[8kk% Li55rK   rh   x_object_objlfiltersrG   c                 x  	 t         j                  |v r|t         j                     n| j                  dk(  r:|t        j                  k(  r'|sddgnddgt        | j                               z  nT| j                  dk(  r|t        j                  k(  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&   g      ?g        r$   r   r2   r3   c              3   4   K   | ]  }|   |d z  k(    yw)r	   Nr   )rb   idecodes     rJ   rd   z _apply_decode.<locals>.<genexpr>q  s     %UQfQi1q5&8%Us   r	   r1   c              3   R   K   | ]  }t        d |d z  z
  z  z   z           yw)g     o@N)round)rb   jdmaxdmins     rJ   rd   z _apply_decode.<locals>.<genexpr>v  s2      FGeq5yD4K84?@As   $'   )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    
yyL bii( 
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q#f+q) 	A!9D!a%=DJJ KPQT: 	 iinJrK   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/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B $+Q/!3, 3Q78<a
l"  - !'4k1  
l rK   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.                        }|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]

    rh   r   ry   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   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     99 "8BII#67:Exx5::%8F
 ::$!MM#.E88s?++e,CXX_++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     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 = =>L
<%?#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<   4 Q? 6R S ?RR;SS	T%S??T)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      s8   7 
  6 6 = 5 ) - I I  BQ7" +1 #>y  %' c & 	O sDIs*+O O  O  	O 
 =$O dE sCx   0
38_,1
[[(Z ZsCc?Q9R Z$p/
S/p/
p/ p/ sK'(	p/
 p/ p/ 5;;S$&'p/f"6
S/"6
"6 "6 	"6
 "6 5;;S$&'"6J(	(sCx.( ( sDIs*+	(
 ( [[(VsCx.*-<A#tCyRUBU<V
=$@ :>s sCx.s  c3h!56s  8C=%$%s }  
	= s   2F- -F;