o
    ۩ZhY$                     @   s   d dl Z d dlZ d dlZd dlmZ d dlmZmZ zd dlmZ W n e	y1   d dl
mZ Y nw 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 ddlmZmZmZmZ dZdedefddZG dd dZG dd dZdS )    N)BytesIO)BinaryIOTuple)Literal   )JBIG2StreamReaderJBIG2StreamWriter)LTImage)LITERAL_DEVICE_CMYK)LITERAL_DEVICE_GRAY)LITERAL_DEVICE_RGB)LITERALS_DCT_DECODELITERALS_JBIG2_DECODELITERALS_JPX_DECODELITERALS_FLATE_DECODEzCould not import Pillow. This dependency of pdfminer.six is not installed by default. You need it to to save jpg images to a file. Install it with `pip install 'pdfminer.six[image]'`xreturnc                 C   s   | d d d S )N       )r   r   r   E/var/www/html/lang_env/lib/python3.10/site-packages/pdfminer/image.pyalign32    s   r   c                
   @   s@   e Zd Zdededededdf
ddZd	ed
eddfddZdS )	BMPWriterfpbitswidthheightr   Nc           
      C   s  || _ || _|| _|| _|dkrd}n|dkrd}n|dkr!d}nt|t| j| j d d | _| j| j | _d|d	  }t	d
d| j| jd| jd| jdd|d}t
|dksaJ tt
|t	ddd|| j dd|}t
|dks}J tt
|| j | | j | |dkrdD ]}	| j t	d|	|	|	 qn|dkrtdD ]}	| j t	d|	|	|	 q| j  | _| j| j | _d S )Nr               r      6   r   z<IiiHHIIIIII(   z<ccIHHI   B   M   )r      ZBBBx)r   r   r   r   
ValueErrorr   linesizeZdatasizestructpacklenstrwriterangetellZpos0pos1)
selfr   r   r   r   ZncolsZ
headersizeinfoheaderir   r   r   __init__%   sX   zBMPWriter.__init__ydatac                 C   s,   | j | j|d | j   | j | d S )Nr   )r   seekr1   r)   r.   )r2   r7   r8   r   r   r   
write_lineU   s   zBMPWriter.write_line)__name__
__module____qualname__r   intr6   bytesr:   r   r   r   r   r   $   s    0r   c                   @   s   e Zd ZdZdeddfddZdedefdd	Zdedefd
dZdedefddZ	dedefddZ
dedededededefddZdedefddZdedefddZededefddZdededeeef fddZdS )ImageWriterzUWrite image to a file

    Supports various image types: JPEG, JBIG2 and bitmaps
    outdirr   Nc                 C   s(   || _ tj| j st| j  d S d S )N)rA   ospathexistsmakedirs)r2   rA   r   r   r   r6   `   s   zImageWriter.__init__imagec                 C   sB  |j \}}|j }t|dkr|d d tv r| |}|S t|dkr4|d d tv r4| |}|S | |r@| 	|}|S |j
dkrU| ||||d d |j
}|S |j
dkrot|jv ro| ||||d |j
d }|S |j
dkrt|jv r| |||||j
}|S t|dkr|d d tv r| |}|S | |}|S )zSave an LTImage to diskr   r   r!   r   r   )srcsizestreamget_filtersr,   r   
_save_jpegr   _save_jpeg2000_is_jbig2_iamge_save_jbig2r   	_save_bmpr   
colorspacer   r   _save_bytes	_save_raw)r2   rF   r   r   filtersnamer   r   r   export_imagee   s2   








zImageWriter.export_imagec           
   	   C   s   |j  }|dusJ | |d\}}t|dK}t|jv rNz
ddlm}m} W n t	y3   t	t
w t|}||}	||	}	|	d}	|	|d n|| W d   |S W d   |S 1 sfw   Y  |S )zSave a JPEG encoded imageN.jpgwbr   )Image
ImageChopsRGBZJPEG)rH   get_rawdata_create_unique_image_nameopenr
   rO   PILrW   rX   ImportErrorPIL_ERROR_MESSAGEr   invertconvertsaver.   )
r2   rF   raw_datarS   rC   r   rW   rX   ifpr5   r   r   r   rJ      s.   






zImageWriter._save_jpegc           	   	   C   s   |j  }|dusJ | |d\}}t|d,}zddlm} W n ty,   ttw t|}||}|	|d W d   |S 1 sGw   Y  |S )zSave a JPEG 2000 encoded imageNz.jp2rV   r   rW   ZJPEG2000)
rH   rZ   r[   r\   r]   rW   r^   r_   r   rb   )	r2   rF   rc   rS   rC   r   rW   rd   r5   r   r   r   rK      s    


zImageWriter._save_jpeg2000c                 C   s   |  |d\}}t|dc}t }g }|j }|D ]\}}	|tv r+||	d   qt|dkr8d}
t	|
t|dkrJ|
|d  d |
|j  |d t|}| }t|}|| W d   |S 1 ssw   Y  |S )	zSave a JBIG2 encoded imagez.jb2rV   ZJBIG2Globalsr   zWThere should never be more than one JBIG2Globals associated with a JBIG2 embedded imager      
N)r[   r\   r   rH   rI   r   appendresolver,   r(   r.   get_datarstripr9   r   Zget_segmentsr   
write_file)r2   rF   rS   rC   r   Zinput_streamZglobal_streamsrR   filter_nameparamsmsgreadersegmentswriterr   r   r   rM      s2   


zImageWriter._save_jbig2r   r   bytes_per_liner   c              	   C   s   |  |d\}}t|d.}t||||}	|j }
d}t|D ]}|	||
|||   ||7 }q W d   |S 1 s>w   Y  |S )zSave a BMP encoded imagez.bmprV   r   N)r[   r\   r   rH   ri   r/   r:   )r2   rF   r   r   rr   r   rS   rC   r   Zbmpr8   r5   r7   r   r   r   rN      s   


zImageWriter._save_bmpc              	   C   s(  |  |d\}}|j\}}t|j | | |jd  }t|dh}zddlm} ddlm	}	 W n t
y<   t
tw |jdkrEd}
n#|jdkrQ|dkrQd	}
n|jdkr]|d
kr]d}
n|jdkrh|dkrhd}
||
|j|j d}|
d	kr}|	|}|| W d   |S 1 sw   Y  |S )z*Save an image without encoding, just bytesrU   r   rV   r   re   )ImageOpsr   1Lr   rY   r   ZCMYKrawN)r[   rG   r,   rH   ri   r   r\   r]   rW   rs   r^   r_   	frombytesr`   rb   )r2   rF   rS   rC   r   r   Zchannelsr   rW   rs   modeZimgr   r   r   rP      s4   
 


zImageWriter._save_bytesc                 C   sl   d|j |jd |jd f }| ||\}}t|d}||j  W d   |S 1 s/w   Y  |S )z#Save an image with unknown encodingz.%d.%dx%d.imgr   r   rV   N)r   rG   r[   r\   r.   rH   ri   )r2   rF   extrS   rC   r   r   r   r   rQ      s   
zImageWriter._save_rawc                 C   s*   | j  }|D ]\}}|tv r dS qdS )NTF)rH   rI   r   )rF   rR   rl   rm   r   r   r   rL     s   
zImageWriter._is_jbig2_iamgery   c                 C   sf   |j | }tj| j|}d}tj|r/d|j ||f }tj| j|}|d7 }tj|s||fS )Nr   z%s.%d%sr   )rS   rB   rC   joinrA   rD   )r2   rF   ry   rS   rC   Z	img_indexr   r   r   r[     s   
z%ImageWriter._create_unique_image_name)r;   r<   r=   __doc__r-   r6   r	   rT   rJ   rK   rM   r>   rN   rP   rQ   staticmethodboolrL   r   r[   r   r   r   r   r@   Z   s2     
	"r@   )rB   Zos.pathr*   ior   typingr   r   r   r^   Ztyping_extensionsZjbig2r   r   Zlayoutr	   Zpdfcolorr
   r   r   Zpdftypesr   r   r   r   r_   r>   r   r   r@   r   r   r   r   <module>   s*    6