o
    uhn9                     @   s  U d Z ddlZddlmZ ddl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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"yv   e"dw ed Z#ee$d< dZ%e&e$d< 	d4d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de)eeeef 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)Z0de)e&e&f de,d!e#de'd&e&de)e j e'e'e*f fd*d+Z1d,e j d-e2e'ef d.edee'e(e ef d/e*de j fd0d1Z3d-e2e'ef d&e&dee'e(e ef de)e#e*f fd2d3Z4dS )5z9Code 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           
      C   s  |t krtdt| rdS d}t| tr| }nt| ts"td| | d dr4d| d dd	  }n| d d
krN| d  }tt	|d }|
dd}n~| d dkro| d  }t||||d \}}|dv rkd}||fS | d dkr| d  }t||||d \}}|dfS | d dkr| }t| d }| d  }|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 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
/DeviceRGBr/   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_map rE   O/var/www/html/bot/env/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)	rG   rH   rI   maskbyte_buffer
data_indexbityxrE   rE   rF   	bits2bytez   s"    rT   rA   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                 3   s"    | ]}t |ft  V  qd S N)rM   r9   .0rS   krE   rF   	<genexpr>   s     z,_extended_image_frombytes.<locals>.<genexpr>)r   	frombytes
ValueErrorr<   r   join)rA   rH   rG   imgexcnb_pixdata_lengthrE   rY   rF   _extended_image_frombytes   s(   rc   c                 C   s   t | }|dkrdd | D \} }}}| |||fS | d }t|tr$|n| }|dkrNd|v rN| d  | d  } }|d\}}t|}| |||fS td	| d
|  )Nr+   c                 s   s    | ]}|  V  qd S rV   )r8   )rX   valuerE   rE   rF   r[      s    z*__handle_flate__indexed.<locals>.<genexpr>r   r    r   r   z(Expected color space with 4 values, got z: )r<   r4   r5   r8   splitr9   r   )r&   countbasehivallookupelement1rE   rE   rF   __handle_flate__indexed   s   rl   colorsobj_as_textc                    s  d}d}t |tr|d dkrt|\}}}	|dkr$d}t|| d}n|dkr0d}t|| d	}t|| ||dkrt ttfrF t trNj	t t
rW 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 q7d|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-   r   r    r   r   r+   )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 rU   c                 3   s6    | ] d   fddtjd D V  qdS )rU   c                 3   s.    | ]}  |fd krdnd V  qdS )   r   r   N)getpixelrW   )
colors_arrr_   rR   rE   rF   r[      s
    
z*_handle_flate.<locals>.<genexpr>.<genexpr>r   N)r^   rL   rH   )rX   )rs   r_   )rR   rF   r[      s    
z _handle_flate.<locals>.<genexpr>r   zInvalid Lookup Table in r!   c                 S   s   g | ]	}t |||gqS rE   )rM   )rX   brE   rE   rF   
<listcomp>  s    z!_handle_flate.<locals>.<listcomp>r   r#   c                 3   s     | ]} ||d   V  qdS )r+   NrE   )rX   n)rj   rE   rF   r[   	  s    
   )rawmoder,   z.tifTIFFF) r4   r   rl   rT   rc   r   r   get_datar   original_bytesr5   encoder;   KeyErrorr	   r=   rA   r<   rM   r   r^   rL   rH   r   r\   convertr9   append
putpaletter
   DEVICE_GRAYr   )rH   rG   rA   r&   rm   rn   	extensionimage_formatrh   ri   nbconvexpected_countactual_countarr_rgb_c_m_y_k_r_g_bmode2rE   )rs   r_   rj   rF   _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$   rA   r\   rH   tobytesr~   )
rH   rG   rA   r&   rm   r   img1rB   r_   r   rE   rE   rF   _handle_jpx!  s"   


r   r_   x_object_objlfiltersrB   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-   r.   c                 3   s     | ]} | |d  kV  qdS )r   NrE   )rX   i)decoderE   rF   r[   c  s    z _apply_decode.<locals>.<genexpr>r   r   c                 3   s,    | ]}t d |d       V  qdS )g     o@N)round)rX   j)dmaxdminrE   rF   r[   h  s    
   )r:   IADECODErA   FT
DCT_DECODE
JPX_DECODEr<   getbandsr4   r   r8   allrL   extendpoint)r_   r   r   r&   rB   lutr   rE   )r   r   r   rF   _apply_decodeG  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|s:d|vr:d	n|d\}}||fS )
Nr   z/BitsPerComponentrJ   rQ   r   r   r   Grayr   )r   COLOR_SPACEr
   
DEVICE_RGBr:   r;   r   )r   rm   r&   rA   rB   rE   rE   rF   _get_mode_and_invert_coloro  s&   
r   )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%   r9   r5   r6   tupleboolr;   rM   rT   rc   rl   r   r   dictr   r   rE   rE   rE   rF   <module>   s     	

"P



o

&

(

