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   A/var/www/html/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 )N               r      6   r   z<IiiHHIIIIII(   z<ccIHHI   B   M   )r      ZBBBx)r   r   r   r   r   r   linesizeZdatasizestructpacklenstrwriterangetellZpos0pos1)
selfr   r   r   r   ZncolsZ
headersizeinfoheaderir   r   r   __init__$   sd   	zBMPWriter.__init__ydatac                 C   s,   | j | j|d | j   | j | d S )Nr   )r   seekr3   r+   r0   )r4   r9   r:   r   r   r   
write_lineZ   s   zBMPWriter.write_line)__name__
__module____qualname__r   intr8   bytesr<   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)rC   ospathexistsmakedirs)r4   rC   r   r   r   r8   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   r.   r   _save_bytes	_save_raw)r4   rH   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RGBZJPEGN)rK   get_data_create_unique_image_nameopenr	   rR   PILrZ   r[   ImportErrorPIL_ERROR_MESSAGEr   invertconvertsaver0   )
r4   rH   r:   rV   rE   r   rZ   r[   ifpr7   r   r   r   rM      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.jp2rY   r   )rZ   ZJPEG2000N)
rK   r]   r^   r_   r`   rZ   ra   rb   r   re   )	r4   rH   r:   rV   rE   r   rZ   rf   r7   r   r   r   rN      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.jb2rY   ZJBIG2Globalsr   zWThere should never be more than one JBIG2Globals associated with a JBIG2 embedded imager      
N)r^   r_   r   rK   rL   r   appendresolver.   r   r0   r]   rstripr;   r   Zget_segmentsr   
write_file)r4   rH   rV   rE   r   Zinput_streamZglobal_streamsrU   filter_nameparamsmsgreadersegmentswriterr   r   r   rP      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.bmprY   r   N)r^   r_   r   rK   r]   r1   r<   )r4   rH   r   r   rr   r   rV   rE   r   Zbmpr:   r7   r9   r   r   r   rQ      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 bytesrX   r!   rY   r   )rZ   ImageOpsr   1Lr   r\   r   ZCMYKrawN)r^   rJ   r.   rK   r]   r   r_   r`   rZ   rs   ra   rb   	frombytesrc   re   )r4   rH   rV   rE   r   r   Zchannelsr   rZ   rs   modeZimgr   r   r   rS      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   rY   N)r   rJ   r^   r_   r0   rK   r]   )r4   rH   extrV   rE   r   r   r   r   rT   
  s   
zImageWriter._save_rawc                 C   s*   | j  }|D ]\}}|tv r dS qdS )NTF)rK   rL   r   )rH   rU   rl   rm   r   r   r   rO     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   )rV   rD   rE   joinrC   rF   )r4   rH   ry   rV   rE   Z	img_indexr   r   r   r^     s   
z%ImageWriter._create_unique_image_name)r=   r>   r?   __doc__r/   r8   r   rW   rM   rN   rP   r@   rQ   rS   rT   staticmethodboolrO   r   r^   r   r   r   r   rB   _   s2    &
 	"rB   ) rD   Zos.pathr,   ior   typingr   r   r   Zpdfminer.jbig2r   r   Zpdfminer.layoutr   Zpdfminer.pdfcolorr	   r
   r   r   r   Zpdfminer.pdfexceptionsr   Zpdfminer.pdftypesr   r   r   r   rb   r@   r   r   rB   r   r   r   r   <module>   s    <