o
    fY$                     @   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   G/home/ubuntu/webapp/venv/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      BBBx)r   r   r   r   
ValueErrorr   linesizedatasizestructpacklenstrwriterangetellpos0pos1)
selfr   r   r   r   ncols
headersizeinfoheaderir   r   r   __init__%   sX   zBMPWriter.__init__ydatac                 C   s,   | j | j|d | j   | j | d S )Nr   )r   seekr4   r*   r0   )r5   r<   r=   r   r   r   
write_lineU   s   zBMPWriter.write_line)__name__
__module____qualname__r   intr;   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)rF   ospathexistsmakedirs)r5   rF   r   r   r   r;   `   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)r5   rK   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RGBJPEG)rM   get_rawdata_create_unique_image_nameopenr
   rT   PILr\   r]   ImportErrorPIL_ERROR_MESSAGEr   invertconvertsaver0   )
r5   rK   raw_datarX   rH   r   r\   r]   ifpr:   r   r   r   rO      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.jp2r[   r   r\   JPEG2000)
rM   r`   ra   rb   rc   r\   rd   re   r   rh   )	r5   rK   ri   rX   rH   r   r\   rj   r:   r   r   r   rP      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.jb2r[   JBIG2Globalsr   zWThere should never be more than one JBIG2Globals associated with a JBIG2 embedded imager      
N)ra   rb   r   rM   rN   r   appendresolver.   r)   r0   get_datarstripr>   r   get_segmentsr   
write_file)r5   rK   rX   rH   r   input_streamglobal_streamsrW   filter_nameparamsmsgreadersegmentswriterr   r   r   rR      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.bmpr[   r   N)ra   rb   r   rM   rq   r1   r?   )r5   rK   r   r   r}   r   rX   rH   r   bmpr=   r:   r<   r   r   r   rS      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 bytesrZ   r   r[   r   rk   )ImageOpsr   1Lr   r^   r   CMYKrawN)ra   rL   r.   rM   rq   r   rb   rc   r\   r   rd   re   	frombytesrf   rh   )r5   rK   rX   rH   r   r   channelsr   r\   r   modeimgr   r   r   rU      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   r[   N)r   rL   ra   rb   r0   rM   rq   )r5   rK   extrX   rH   r   r   r   r   rV      s   
zImageWriter._save_rawc                 C   s*   | j  }|D ]\}}|tv r dS qdS )NTF)rM   rN   r   )rK   rW   rw   rx   r   r   r   rQ     s   
zImageWriter._is_jbig2_iamger   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   )rX   rG   rH   joinrF   rI   )r5   rK   r   rX   rH   	img_indexr   r   r   ra     s   
z%ImageWriter._create_unique_image_name)r@   rA   rB   __doc__r/   r;   r	   rY   rO   rP   rR   rC   rS   rU   rV   staticmethodboolrQ   r   ra   r   r   r   r   rE   Z   s2     
	"rE   )rG   os.pathr,   ior   typingr   r   r   rd   typing_extensionsjbig2r   r   layoutr	   pdfcolorr
   r   r   pdftypesr   r   r   r   re   rC   r   r   rE   r   r   r   r   <module>   s*    6