o
    >e*                     @   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rMddlmZ nddlmZ ejdd
 dkrcddlmZ nddlmZ zddlmZ W n ey|   edw ed Zeed< dZ e!ed< 	d%dee"ee ef de!dede!d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"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$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)Imagez]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rs| d
 } t| tr^|  } t| |||d
 \}}|dv rod}||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can not interprete 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   )1bitz/DeviceGraypalettez
/DeviceRGBr,   2bit4bit)r#   r   
isinstancer   strlist
startswith
get_objectr   intgetr   _get_imagemodelenr
   __name__values)
r$   r%   r&   r'   icc_profilemode2invert_colororiginal_color_spacemode_mapmode rB   Z/var/www/html/humari/django-venv/lib/python3.10/site-packages/pypdf/_xobj_image_helpers.pyr8   .   s   







r8   sizedatarA   colorsobj_as_textc                    s  dt dtttf dtdt fdd}d}d}t|tr+|d	 d
kr+dd |D \}}	}
|dkr8d}||| d}n|dkrDd}||| d}t|| ||d
krddlm} tt	t
fra t|rijttrr zddddddt|	d	dd	  \}}}W n ty   td|	 dt dY n1w jdkrd| }t|krt|k rtd| dt d t|d std!| dt d 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 qId"|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/}||d0fS )1zh
    Process image encoded in flateEncode
    Returns img, image_format, extension, color inversion
    rE   rD   bitsr(   c           	      S   s   d|> d }t |d |d  }d}d| }t|d D ]=}|dkr0|d| kr0|d7 }d| }t|d D ]"}| | |? |@ |||d  | < ||8 }|dk rX|d7 }d| }q6qt|S )Nr   r   r   r   )	bytearrayrangebytes)	rE   rD   rH   masknbuffbybityxrB   rB   rC   	bits2byte   s"    z _handle_flate.<locals>.bits2bytez.pngPNGr   r+   c                 s   s    | ]}|  V  qd S )N)r5   ).0valuerB   rB   rC   	<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     c                    s2   g | ] d   fddtjd D qS )rY   c                    s*   g | ]}  |fd krdnd qS )   r   r   )getpixel)rT   rQ   )
colors_arrimgrP   rB   rC   
<listcomp>   s    z,_handle_flate.<locals>.<listcomp>.<listcomp>r   )joinrJ   rD   )rT   )r\   r]   )rP   rC   r^      s    z!_handle_flate.<locals>.<listcomp>zInvalid Lookup Table in r   c                 S   s   g | ]	}t |||gqS rB   )rK   )rT   brB   rB   rC   r^      s    r   r!   c                 3   s     | ]} ||d   V  qdS )r)   NrB   )rT   n)lookuprB   rC   rV      s    
   )rawmoder*   z.tifTIFFF) rK   r   r6   r1   r   r   	frombytesgenericrW   r   r   get_dataoriginal_bytesr2   encoder8   KeyErrorr
   r:   rA   r9   r   r	   r_   rJ   rD   convertappend
putpaletter   DEVICE_GRAYr   )rD   rE   rA   r$   rF   rG   rR   	extensionimage_formatbasehivalrW   nbconvexpected_countarr_rgb_c_m_y_k_r_g_br=   rB   )r\   r]   rb   rC   _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}z|j|kr=t ||j|	 }n|}W n t
yS   t ||j|	 }Y nw |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   openr   r8   r   r"   rA   rf   rD   tobytesOSErrorrl   )
rD   rE   rA   r$   rF   rp   img1r>   r]   rq   rB   rB   rC   _handle_jpx  s(   


r   )r   )(__doc__sysior   typingr   r   r   r   r   _utilsr	   r
   	constantsr   errorsr   rg   r   r   r   r   r   version_infor   typing_extensionsr   PILr   ImportErrorr"   __annotations__r#   r6   r2   boolr8   rK   r   r   rB   rB   rB   rC   <module>   s    

R

 
