o
    li6                     @   s|  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 z
ddl!m"Z"m#Z# W n e$yz   e$dw ed Z%ee&d< dZ'e(e&d< 	d2de
e)ee ef de(de%de(de	e%e*f f
ddZ+de,de	e(e(f de(de,fdd Z-d!e)de	e(e(f de,de"j"fd"d#Z.de	e(e(f de,d!e%de)d$e(d%e)de	e"j"e)e)e*f fd&d'Z/de	e(e(f de,d!e%de)d$e(de	e"j"e)e)e*f fd(d)Z0d*e"j"d+ee)ef d,ede
e)ee ef d-e*de"j"fd.d/Z1d+ee)ef d$e(de
e)ee ef de	e%e*f fd0d1Z2dS )3z9Code 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           
      C   s  |t krtdt| trdS t| trnt| tstd| | d dr1d| d dd  } n| d d	krK| d
  }tt	|d }|
dd} n| d dkrl| d
  } t| |||d
 \}}|dv rhd}||fS | d dkr| d } t| tr|  } t| |||d
 \}}|dfS | d dkr| }t| d
 }| d } t| tr|  } | dkr|d
kr|d
 d dkrtd|d
 d  dt dS t| |||d
 \}}||fS dddddddd }|
| pt| | p|}	|	|	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
/DeviceRGBr1   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mode rG   X/var/www/html/pca-backend/venv/lib/python3.10/site-packages/pypdf/_xobj_image_helpers.pyr=   )   s   






r=   datasizebitsc           	      C   s   d|> d }t |d |d  }d}d| }t|d D ]9}|d| kr,|d7 }d| }t|d D ]"}| | |? |@ |||d  | < ||8 }|dk rT|d7 }d| }q2qt|S )Nr
   r      )	bytearrayrangebytes)	rI   rJ   rK   masknbuffbybityxrG   rG   rH   	bits2bytez   s"    rV   rF   c              
      s   z
t | ||}W |S  tyU } z?|d |d  }t|}|dkr'td||| dkr/||t|  |  d fdd|D }t | ||}W Y d }~|S d }~ww )Nr   r
   z9Data is 0 bytes, cannot process an image from empty data.    c                    s   g | ]}t |ft  qS rG   )rO   r;   .0rU   krG   rH   
<listcomp>   s    z-_extended_image_frombytes.<locals>.<listcomp>)r   	frombytes
ValueErrorr>   r   join)rF   rJ   rI   imgexcnb_pixdata_lengthrG   rZ   rH   _extended_image_frombytes   s(   rd   colorsobj_as_textc                    s  d}d}t |tr|d dkrdd |D \}}}	|dkr'd}t|| d	}n|d
kr3d}t|| d}t|| ||dkrddlm}
 t ttfrO t |
rWj	t t
r` zddddddt|ddd  \}}}W n ty   td| dt dY n:w jdkrd	| }t}||kr||k rtd| d| dt tdg||  7 nt|d std| d| dt d| d| |d g d fddtjd D }t|j|n|t|	d | krtd| t dnu|d kr&dd!d D d"}nc|d#krg }fd$dtddtd  dD D ]A\}}}}td%d|d%   d|d%   }td%d|d%   d|d%   }td%d|d%   d|d%   }|t|||f q@d|d"}durj|d& |tjkrd nd"n!t |ts|d d'krt|||d }||krt|| ||d#krd(}d)}||d*fS )+zh
    Process image encoded in flateEncode
    Returns img, image_format, extension, color inversion
    z.pngPNGr   r/   c                 s   s    | ]}|  V  qd S )N)r:   )rY   valuerG   rG   rH   	<genexpr>   s    z _handle_flate.<locals>.<genexpr>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   zBase z8 not coded please share the pdf file with pypdf dev teamNr   z#Not enough lookup values: Expected z, got .z!Too many lookup values: Expected rW   c                    s2   g | ] d   fddtjd D qS )rW   c                    s*   g | ]}  |fd krdnd qS )   r
   r   )getpixelrX   )
colors_arrr`   rT   rG   rH   r\      s    z,_handle_flate.<locals>.<listcomp>.<listcomp>r   )r_   rN   rJ   )rY   )rn   r`   )rT   rH   r\      s    z!_handle_flate.<locals>.<listcomp>zInvalid Lookup Table in r#   c                 S   s   g | ]	}t |||gqS rG   )rO   )rY   brG   rG   rH   r\      s    r   r%   c                 3   s     | ]} ||d   V  qdS )r-   NrG   )rY   n)lookuprG   rH   ri      s    
   )rawmoder.   z.tifTIFFF) r6   r   rV   rd   genericrj   r   r   get_dataoriginal_bytesr7   encoder=   KeyErrorr   r?   rF   r>   rO   r   r_   rN   rJ   r   r]   convertr;   append
putpaletter   DEVICE_GRAYr   )rJ   rI   rF   r(   re   rf   	extensionimage_formatbasehivalrj   nbconvexpected_countactual_countarr_rgb_c_m_y_k_r_g_brB   rG   )rn   r`   rq   rH   _handle_flate   s   









   



r   c           
      C   s   d}t jt|d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=|}n|j|hdd
hkrQt ||j|	 }n|
|}|jd
kr`|
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&   rF   r]   rJ   tobytesrz   )
rJ   rI   rF   r(   re   r~   img1rC   r`   r   rG   rG   rH   _handle_jpx  s"   


r   r`   x_object_objlfiltersrC   c                    s  | tj| jdkr|tjtjfv s|r"| jdkr"ddgt|   nd  t	|t
r4|d  dkr4d  t	|t
rK|d  dkrKddgt|     d urt fdd	tt D sg }tdt d
D ]} |  |d  |fdd	tdD  qh| |} | S )Nr%   r#   g      ?g        r   r/   r0   c                 3   s     | ]} | |d  kV  qdS )r   NrG   )rY   i)decoderG   rH   ri   W  s    z _apply_decode.<locals>.<genexpr>r   r
   c                 3   s,    | ]}t d |d       V  qdS )g     o@N)round)rY   j)dmaxdminrG   rH   ri   \  s    
   )r<   IADECODErF   FT
DCT_DECODE
JPX_DECODEr>   getbandsr6   r   r:   allrN   extendpoint)r`   r   r   r(   rC   lutr   rG   )r   r   r   rH   _apply_decode;  s6   	

&

r   c                 C   s   t j| v r| t j tjkrd}| dddk r*t| dd ddd\}}||fS t||dkr;t|ts;d|vr;d	n|d\}}||fS )
Nr   z/BitsPerComponentrL   rS   r   r   r
   Grayr   )r   COLOR_SPACEr   
DEVICE_RGBr<   r=   r6   r   )r   re   r(   rF   rC   rG   rG   rH   _get_mode_and_invert_colorc  s&   
r   )r   )3__doc__sysior   typingr   r   r   r   r   r   r	   _utilsr   r   	constantsr   r   r   r   r   errorsr   r   ru   r   r   r   r   r   version_infor   typing_extensionsPILr   r   ImportErrorr&   __annotations__r'   r;   r7   boolr=   rO   rV   rd   r   r   r   r   rG   rG   rG   rH   <module>   s    $

"Q



u

&

(

