o
    h$                     @   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mZ d dl	m
Z
mZ d dlmZ d dlmZmZmZmZ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LiteralTuple)JBIG2StreamReaderJBIG2StreamWriter)LTImage)LITERAL_DEVICE_CMYKLITERAL_DEVICE_GRAYLITERAL_DEVICE_RGBLITERAL_INLINE_DEVICE_GRAYLITERAL_INLINE_DEVICE_RGB)PDFValueError)LITERALS_DCT_DECODELITERALS_FLATE_DECODELITERALS_JBIG2_DECODELITERALS_JPX_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/var/www/html/govbot/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 )N               r      6   r   z<IiiHHIIIIII(   z<ccIHHI   B   M   )r      BBBx)r   r   r   r   r   r   linesizedatasizestructpacklenstrwriterangetellpos0pos1)
selfr   r   r   r   ncols
headersizeinfoheaderir   r   r   __init__$   sd   	zBMPWriter.__init__ydatac                 C   s,   | j | j|d | j   | j | d S )Nr   )r   seekr6   r,   r2   )r7   r>   r?   r   r   r   
write_lineZ   s   zBMPWriter.write_line)__name__
__module____qualname__r   intr=   bytesrA   r   r   r   r   r   #   s    6r   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)rH   ospathexistsmakedirs)r7   rH   r   r   r   r=   e   s   zImageWriter.__init__imagec                 C   s>  |j \}}|j }|d d tv r| |}|S |d d tv r(| |}|S | |r4| |}|S |j	dkrI| 
||||d d |j	}|S |j	dkrht|jv sXt|jv rh| 
||||d |j	d }|S |j	dkrt|jv swt|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   
_save_jpegr   _save_jpeg2000_is_jbig2_iamge_save_jbig2r   	_save_bmpr   
colorspacer   r
   r   r0   r   _save_bytes	_save_raw)r7   rM   r   r   filtersnamer   r   r   export_imagej   s:   














zImageWriter.export_imagec           
   	   C   s   |j  }| |d\}}t|dK}t|jv rHz
ddlm}m} W n t	y-   t	t
w t|}||}	||	}	|	d}	|	|d n|| W d   |S W d   |S 1 s`w   Y  |S )zSave a JPEG encoded image.jpgwbr   )Image
ImageChopsRGBJPEGN)rP   get_data_create_unique_image_nameopenr	   rW   PILr_   r`   ImportErrorPIL_ERROR_MESSAGEr   invertconvertsaver2   )
r7   rM   r?   r[   rJ   r   r_   r`   ifpr<   r   r   r   rR      s,   






zImageWriter._save_jpegc           	   	   C   s   |j  }| |d\}}t|d,}zddlm} W n ty&   ttw t|}||}|	|d W d   |S 1 sAw   Y  |S )zSave a JPEG 2000 encoded imagez.jp2r^   r   )r_   JPEG2000N)
rP   rc   rd   re   rf   r_   rg   rh   r   rk   )	r7   rM   r?   r[   rJ   r   r_   rl   r<   r   r   r   rS      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)rd   re   r   rP   rQ   r   appendresolver0   r   r2   rc   rstripr@   r   get_segmentsr   
write_file)r7   rM   r[   rJ   r   input_streamglobal_streamsrZ   filter_nameparamsmsgreadersegmentswriterr   r   r   rU      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)rd   re   r   rP   rc   r3   rA   )r7   rM   r   r   r}   r   r[   rJ   r   bmpr?   r<   r>   r   r   r   rV      s   	


zImageWriter._save_bmpc              	   C   s   |  |d\}}|j\}}t|j | | |jd  }t|dd}z
ddlm}m	}	 W n t
y8   t
tw |jdkrAd}
n#|jdkrM|dkrMd}
n|jdkrY|d	krYd
}
n|jdkrd|dkrdd}
||
|j|j d}|
dkry|	|}|| W d   |S 1 sw   Y  |S )z*Save an image without encoding, just bytesr]   r!   r^   r   )r_   ImageOpsr   1Lr   ra   r   CMYKrawN)rd   rO   r0   rP   rc   r   re   rf   r_   r   rg   rh   	frombytesri   rk   )r7   rM   r[   rJ   r   r   channelsr   r_   r   modeimgr   r   r   rX      s2   
 


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   rO   rd   re   r2   rP   rc   )r7   rM   extr[   rJ   r   r   r   r   rY   
  s   
zImageWriter._save_rawc                 C   s*   | j  }|D ]\}}|tv r dS qdS )NTF)rP   rQ   r   )rM   rZ   rw   rx   r   r   r   rT     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   )r[   rI   rJ   joinrH   rK   )r7   rM   r   r[   rJ   	img_indexr   r   r   rd     s   
z%ImageWriter._create_unique_image_name)rB   rC   rD   __doc__r1   r=   r   r\   rR   rS   rU   rE   rV   rX   rY   staticmethodboolrT   r   rd   r   r   r   r   rG   _   s2    &
 	"rG   ) rI   os.pathr.   ior   typingr   r   r   pdfminer.jbig2r   r   pdfminer.layoutr   pdfminer.pdfcolorr	   r
   r   r   r   pdfminer.pdfexceptionsr   pdfminer.pdftypesr   r   r   r   rh   rE   r   r   rG   r   r   r   r   <module>   s    <