o
     Zh6                     @   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mZ ejdd dkraddlm Z  nddl!m Z  z
ddl"m#Z#m$Z$ W n e%y|   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'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+ee*ef d,ede
e*ee ef d-e+de#j#fd.d/Z2d+ee*ef d$e)de
e*ee ef de	e&e+f fd0d1Z3d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TextStringObject   )   
   )	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 deeply. If required, consider increasing MAX_IMAGE_MODE_NESTING_DEPTH.)r   FzCannot interpret color spacer   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"   )Z1bitz/DeviceGraypalettez
/DeviceRGBr2   Z2bitZ4bit)r(   r   
isinstancer   strlist
startswith
get_objectr	   intget_get_imagemoder   lenr   __name__values)	r)   r*   r+   r,   Zicc_profilemodeinvert_colorZoriginal_color_spaceZmode_map rA   P/var/www/html/lang_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)	rC   rD   rE   maskZbyte_bufferZ
data_indexbityxrA   rA   rB   	bits2byte}   s"    rN   r?   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)rI   r9   .0rM   krA   rB   	<genexpr>   s     z,_extended_image_frombytes.<locals>.<genexpr>)r   	frombytes
ValueErrorr<   r   join)r?   rD   rC   imgexcZnb_pixZdata_lengthrA   rS   rB   _extended_image_frombytes   s(   r[   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rt ttfrI t trQjt t	rZ
 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.pngZPNGr   r0   c                 s   s    | ]}|  V  qd S rP   )r8   )rR   valuerA   rA   rB   rU      s    z _handle_flate.<locals>.<genexpr>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 rO   c                 3   s6    | ] d   fddtjd D V  qdS )rO   c                 3   s.    | ]}  |fd krdnd V  qdS )   r
   r   N)ZgetpixelrQ   )
colors_arrrY   rL   rA   rB   rU      s
    
z*_handle_flate.<locals>.<genexpr>.<genexpr>r   N)rX   rH   rD   )rR   )ra   rY   )rL   rB   rU      s    
r
   zInvalid Lookup Table in r$   c                 S   s   g | ]	}t |||gqS rA   )rI   )rR   brA   rA   rB   
<listcomp>   s    z!_handle_flate.<locals>.<listcomp>r    r&   c                 3   s     | ]} ||d   V  qdS )r.   NrA   )rR   n)lookuprA   rB   rU      s    
   )rawmoder/   z.tifZTIFFF)r4   r   rN   r[   r   r   get_datar   original_bytesr5   encoder;   KeyErrorr   r=   r?   r<   rI   r   rX   rH   rD   r   rV   convertr9   appendZ
putpaletter   ZDEVICE_GRAYr   )rD   rC   r?   r)   r\   r]   	extensionimage_formatbaseZhivalnbconvZexpected_countZactual_countZarrZ_rgbZ_c_mZ_yZ_k_rZ_g_bZmode2rA   )ra   rY   re   rB   _handle_flate   s   









   



rv   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&   rw   )r   openr   r;   r	   r'   r?   rV   rD   tobytesrl   )
rD   rC   r?   r)   r\   rn   Zimg1r@   rY   ro   rA   rA   rB   _handle_jpx  s"   


r{   rY   x_object_objlfiltersr@   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   r0   r1   c                 3   s     | ]} | |d  kV  qdS )r   NrA   )rR   i)decoderA   rB   rU   T  s    z _apply_decode.<locals>.<genexpr>r   r
   c                 3   s,    | ]}t d |d       V  qdS )g     o@N)round)rR   j)dmaxdminrA   rB   rU   Y  s    
   )r:   IAZDECODEr?   FTZ
DCT_DECODEZ
JPX_DECODEr<   Zgetbandsr4   r   r8   allrH   extendpoint)rY   r|   r}   r)   r@   Zlutr~   rA   )r   r   r   rB   _apply_decode8  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/BitsPerComponentrF   rK   r   r   r
   ZGrayr   )r   ZCOLOR_SPACEr   Z
DEVICE_RGBr:   r;   r4   r   )r|   r\   r)   r?   r@   rA   rA   rB   _get_mode_and_invert_color`  s&   
r   )r   )4__doc__sysior   typingr   r   r   r   r   r   r	   Z_utilsr   r   	constantsr   r   r   r   r   errorsr   r   Zgenericr   r   r   r   r   r   version_infor   typing_extensionsZPILr   r   ImportErrorr'   __annotations__r(   r9   r5   boolr;   rI   rN   r[   rv   r{   r   r   rA   rA   rA   rB   <module>   s    $ 	

"S



o

&

(

