o
    vh9                     @   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< 	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%Z0d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)Z1de	e)e)f de-d!e&de*d&e)de	e#j#e*e*e+f fd*d+Z2d,e#j#d-ee*ef d.ede
e*ee ef d/e+de#j#fd0d1Z3d-ee*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DictListLiteralTuple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
/DeviceRGBr2   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 rH   W/var/www/html/hyperkenya/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)	rJ   rK   rL   maskbyte_buffer
data_indexbityxrH   rH   rI   	bits2bytez   s"    rW   rD   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)rP   r<   .0rV   krH   rI   	<genexpr>   s     z,_extended_image_frombytes.<locals>.<genexpr>)r   	frombytes
ValueErrorr?   r   join)rD   rK   rJ   imgexcnb_pixdata_lengthrH   r\   rI   _extended_image_frombytes   s(   rf   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 rY   )r;   )r[   valuerH   rH   rI   r^      s    z*__handle_flate__indexed.<locals>.<genexpr>r
   r    r   r   z(Expected color space with 4 values, got z: )r?   r7   r8   r;   splitr<   r   )r)   countbasehivallookupelement1rH   rH   rI   __handle_flate__indexed   s   ro   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   r0   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 rX   c                 3   s6    | ] d   fddtjd D V  qdS )rX   c                 3   s.    | ]}  |fd krdnd V  qdS )   r
   r   N)getpixelrZ   )
colors_arrrb   rU   rH   rI   r^      s
    
z*_handle_flate.<locals>.<genexpr>.<genexpr>r   N)ra   rO   rK   )r[   )rv   rb   )rU   rI   r^      s    
z _handle_flate.<locals>.<genexpr>r
   zInvalid Lookup Table in r$   c                 S   s   g | ]	}t |||gqS rH   )rP   )r[   brH   rH   rI   
<listcomp>  s    z!_handle_flate.<locals>.<listcomp>r    r&   c                 3   s     | ]} ||d   V  qdS )r.   NrH   )r[   n)rm   rH   rI   r^   	  s    
   )rawmoder/   z.tifTIFFF) r7   r   ro   rW   rf   r   r   get_datar   original_bytesr8   encoder>   KeyErrorr   r@   rD   r?   rP   r   ra   rO   rK   r   r_   convertr<   append
putpaletter   DEVICE_GRAYr   )rK   rJ   rD   r)   rp   rq   	extensionimage_formatrk   rl   nbconvexpected_countactual_countarr_rgb_c_m_y_k_r_g_bmode2rH   )rv   rb   rm   rI   _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'   rD   r_   rK   tobytesr   )
rK   rJ   rD   r)   rp   r   img1rE   rb   r   rH   rH   rI   _handle_jpx!  s"   


r   rb   x_object_objlfiltersrE   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   NrH   )r[   i)decoderH   rI   r^   c  s    z _apply_decode.<locals>.<genexpr>r   r
   c                 3   s,    | ]}t d |d       V  qdS )g     o@N)round)r[   j)dmaxdminrH   rI   r^   h  s    
   )r=   IADECODErD   FT
DCT_DECODE
JPX_DECODEr?   getbandsr7   r   r;   allrO   extendpoint)rb   r   r   r)   rE   lutr   rH   )r   r   r   rI   _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/BitsPerComponentrM   rT   r   r   r
   Grayr   )r   COLOR_SPACEr   
DEVICE_RGBr=   r>   r   )r   rp   r)   rD   rE   rH   rH   rI   _get_mode_and_invert_coloro  s&   
r   )r   )5__doc__sysior   typingr   r   r   r   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(   r<   r8   boolr>   rP   rW   rf   ro   r   r   r   r   rH   rH   rH   rI   <module>   s    $ 	

"P



o

&

(

