a
    còfÒ,  ã                   @   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	 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mZmZ ejdd
… dkršddlmZ nddl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�y   edƒ‚Y n0 ed Zee d< dZ!e"e d< d$ee#ee ef e"ee"eee$f dœdd„Z%e&ee"e"f e"e&dœdd„Z'e#ee"e"f e&ejdœdd„Z(ee"e"f e&ee#e"e#eeje#e#e$f dœdd „Z)ee"e"f e&ee#e"eeje#e#e$f d!œd"d#„Z*dS )%z9Code in here is only used by pypdf.filters._xobj_to_imageé    N)ÚBytesIO)ÚAnyÚListÚTupleÚUnionÚcasté   )Úcheck_if_whitespace_onlyÚlogger_warning)ÚColorSpaces)ÚPdfReadError)ÚArrayObjectÚDecodedStreamObjectÚEncodedStreamObjectÚIndirectObjectÚ
NullObjecté   )é   é   )ÚLiteral)r   é
   )Ú	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,�nšt| tƒsDtd| ƒ‚�n‚| d  d¡rjd| d dd…  } �n\| d d	kr | d
  ¡ }tt	|d ƒ}| 
dd¡} �n&| d dkrâ| d
  ¡ } t| |||d
 ƒ\}}|dv rÚd}||fS | d dk�r*| d } t| tƒ�r|  ¡ } t| |||d
 ƒ\}}|dfS | d dk�rÆ| }t| d
 ƒ}| d } t| tƒ�rd|  ¡ } | dk�r¨|d
k�r¨|d
 d dk�r¤td|d
 d › d�tƒ dS t| |||d
 ƒ\}}||fS dddddddd œ}| 
| ¡�pút| ¡ ƒ| �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   z/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
/DeviceRGBr-   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Úmode2Úinvert_colorZoriginal_color_spaceZmode_mapÚmode© r=   úV/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/pypdf/_xobj_image_helpers.pyr6   .   s‚    ÿ


ÿÿÿþÿù
ÿýr6   )ÚdataÚsizeÚbitsr)   c           	      C   s¼   d|> d }t |d |d  ƒ}d}d| }t|d ƒD ]z}|dkr`|d| kr`|d7 }d| }t|d ƒD ]D}| | |? |@ |||d  | < ||8 }|dk rl|d7 }d| }qlq8t|ƒS )Nr   r   r   )Ú	bytearrayÚrangeÚbytes)	r?   r@   rA   ÚmaskZnbuffZbyÚbitÚyÚxr=   r=   r>   Ú	bits2byte~   s     rI   )r<   r@   r?   r)   c              
      sš   zt  | ||¡}W n‚ ty” } zj|d |d  }t|ƒ| dkrF|‚|t| ƒ t|ƒ ‰ d ‡ fdd„|D ƒ¡}t  | ||¡}W Y d }~n
d }~0 0 |S )Nr   r   ó    c                    s   g | ]}t |ftˆ ƒ ƒ‘qS r=   )rD   r4   ©Ú.0rH   ©Úkr=   r>   Ú
<listcomp>š   rJ   z-_extended_image_frombytes.<locals>.<listcomp>)r   Ú	frombytesÚ
ValueErrorr7   Újoin)r<   r@   r?   ÚimgÚexcZnb_pixr=   rM   r>   Ú_extended_image_frombytes�   s    $rU   )r@   r?   r<   r%   ÚcolorsÚobj_as_textr)   c                    sž  d}d}t |tƒr4|d dkr4dd„ |D ƒ\}}}	‰|dkrNd}t|| d	ƒ}n|d
krfd}t|| dƒ}t|| |ƒ‰|dk�r>ddlm}
 t ˆttfƒržˆ ¡ ‰t ˆ|
ƒr®ˆ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 �q€0 ˆjdk�rêd	| }tˆƒ|k�rštˆƒ|k �rbtd|› dtˆƒ› d�ƒ‚tˆ|d… ƒ�sŽtd|› dtˆƒ› d�ƒ‚ˆd|… ‰ˆd|… ˆ|d… g‰ d ‡ ‡fdd„tˆjd ƒD ƒ¡}t |ˆj|¡‰�n8ˆ |¡‰tˆƒ|	d | k�r td|› �tƒ d‰nê|d k�rDd d!d„ ˆD ƒ¡‰d"}nÆ|d#k�r
g }‡fd$d„tddtˆƒd  dƒD ƒD ]‚\}}}}td%d|d%   d|d%   ƒ}td%d|d%   d|d%   ƒ}td%d|d%   d|d%   ƒ}| t|||fƒ¡ �qxd |¡‰d"}ˆdu�r"ˆjˆ|d&� ˆ |tjk�r6d nd"¡‰nBt |t ƒ�s€|d d'k�r€t|||ƒd }||k�r€t || |¡‰|d#k�r’d(}d)}ˆ||d*fS )+zh
    Process image encoded in flateEncode
    Returns img, image_format, extension, color inversion
    z.pngZPNGr   r,   c                 s   s   | ]}|  ¡ V  qd S )N)r3   )rL   Úvaluer=   r=   r>   Ú	<genexpr>±   rJ   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 rJ   c                    s2   g | ]*‰ d   ‡‡‡ fdd„tˆjd ƒD ƒ¡‘qS )rJ   c                    s*   g | ]"}ˆ ˆ  |ˆf¡d kr dnd ‘qS )é   r   r   )ZgetpixelrK   )Ú
colors_arrrS   rG   r=   r>   rO   â   s   ÿz,_handle_flate.<locals>.<listcomp>.<listcomp>r   )rR   rC   r@   )rL   )r]   rS   )rG   r>   rO   à   s   úþÿz!_handle_flate.<locals>.<listcomp>zInvalid Lookup Table in r    c                 S   s   g | ]}t |||gƒ‘qS r=   )rD   )rL   Úbr=   r=   r>   rO   ò   rJ   r   r"   c                 3   s   | ]}ˆ ||d  … V  qdS )r*   Nr=   )rL   Ún)Úlookupr=   r>   rY   ø   s   éÿ   )Úrawmoder+   z.tifZTIFFF)!r/   r   rI   rU   ÚgenericrZ   r   r   Úget_dataÚoriginal_bytesr0   Úencoder6   ÚKeyErrorr
   r8   r<   r7   r   r	   rR   rC   r@   r   rP   Úconvertr4   ÚappendrD   Z
putpaletter   ZDEVICE_GRAYr   )r@   r?   r<   r%   rV   rW   Ú	extensionÚimage_formatÚbaseZhivalrZ   ÚnbÚconvZexpected_countZarrZ_rgbZ_cÚ_mZ_yZ_kÚ_rZ_gÚ_br:   r=   )r]   rS   r`   r>   Ú_handle_flateŸ   s¤    


ûú
þÿÿùÿ



ÿ   



rr   )r@   r?   r<   r%   rV   r)   c           
      C   sÐ   d}t jt|ƒdd�}t|||ƒ\}}|dkrBtt|jƒ}|dv }|jdkrX|dkrXd}|j|kst|j|hdd	hkrz|}n2|j|hdd
hkr¢t  ||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"   rs   )r   Úopenr   r6   r   r#   r<   rP   r@   Útobytesrh   )
r@   r?   r<   r%   rV   rj   Zimg1r;   rS   rk   r=   r=   r>   Ú_handle_jpx  s"    


rw   )r   )+Ú__doc__ÚsysÚior   Útypingr   r   r   r   r   Ú_utilsr	   r
   Ú	constantsr   Úerrorsr   rc   r   r   r   r   r   Úversion_infor   Ztyping_extensionsr   ZPILr   r   ÚImportErrorr#   Ú__annotations__r$   r4   r0   Úboolr6   rD   rI   rU   rr   rw   r=   r=   r=   r>   Ú<module>   sd   ÿ
ÿ ü
ûPþ
ùr
ú