o
    
zib%                     @   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 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)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   M/home/air/biblejyuku/back/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      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   seekr5   r+   r1   )r6   r=   r>   r   r   r   
write_lineZ   s   zBMPWriter.write_line)__name__
__module____qualname__r   intr<   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)rG   ospathexistsmakedirs)r6   rG   r   r   r   r<   e   s   zImageWriter.__init__imagec                 C   sP  |j \}}|j }|s| |}|S |d d tv r"| |}|S |d d tv r1| |}|S | |r=| 	|}|S |j
dkrR| ||||d d |j
}|S |j
dkrqt|jv sat|jv rq| ||||d |j
d }|S |j
dkrt|jv st|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_filters_save_bytesr   
_save_jpegr   _save_jpeg2000_is_jbig2_iamge_save_jbig2r   	_save_bmpr
   
colorspacer   r	   r   r/   r   	_save_raw)r6   rL   r   r   filtersnamer   r   r   export_imagej   s@   


 












zImageWriter.export_imagec                 C   s   |j  }| |d\}}t|dQ}t|jv rNz
ddlm}m} W n t	y3 } zt	t
|d}~ww t|}	||	}
||
}|d}||d n|| W d   |S W d   |S 1 sfw   Y  |S )zSave a JPEG encoded image.jpgwbr   )Image
ImageChopsNRGBJPEG)rO   get_data_create_unique_image_nameopenr   rW   PILr^   r_   ImportErrorPIL_ERROR_MESSAGEr   invertconvertsaver1   )r6   rL   r>   rZ   rI   r   r^   r_   errifpimginvertedrgb_imgr   r   r   rR      s.   







zImageWriter._save_jpegc           
      C   s   |j  }| |d\}}t|d2}zddlm} W n ty, } ztt|d}~ww t|}||}	|		|d W d   |S 1 sGw   Y  |S )zSave a JPEG 2000 encoded imagez.jp2r]   r   )r^   NJPEG2000)
rO   rb   rc   rd   re   r^   rf   rg   r   rj   )
r6   rL   r>   rZ   rI   r   r^   rk   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)rc   rd   r   rO   rP   r   appendresolver/   r   r1   rb   rstripr?   r   get_segmentsr   
write_file)r6   rL   rZ   rI   r   input_streamglobal_streamsrY   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)rc   rd   r   rO   rb   r2   r@   )r6   rL   r   r   r   r   rZ   rI   r   bmpr>   r;   r=   r   r   r   rV      s   	


zImageWriter._save_bmpc                 C   s,  |  |d\}}|j\}}t|j | | |jd  }t|dj}z
ddlm}m	}	 W n t
y> }
 zt
t|
d}
~
ww |jdkrGd}n#|jdkrS|dkrSd	}n|jdkr_|d
kr_d}n|jdkrj|dkrjd}|||j|j d}|d	kr|	|}|| W d   |S 1 sw   Y  |S )z*Save an image without encoding, just bytesr\   r    r]   r   )r^   ImageOpsNr   1Lr   r`   r   CMYKraw)rc   rN   r/   rO   rb   r   rd   re   r^   r   rf   rg   	frombytesrh   rj   )r6   rL   rZ   rI   r   r   channelsr   r^   r   rk   moderm   r   r   r   rQ      s4   
 



zImageWriter._save_bytesc                 C   sv   d|j  d|jd  d|jd  d}| ||\}}t|d}||j  W d   |S 1 s4w   Y  |S )z#Save an image with unknown encoding.r   r   r   z.imgr]   N)r   rN   rc   rd   r1   rO   rb   )r6   rL   extrZ   rI   r   r   r   r   rX     s   &
zImageWriter._save_rawc                 C   s*   | j  }|D ]\}}|tv r dS qdS )NTF)rO   rP   r   )rL   rY   rz   _paramsr   r   r   rT     s   
zImageWriter._is_jbig2_iamger   c                 C   sj   |j | }tj| j|}d}tj|r1|j  d| | }tj| j|}|d7 }tj|s||fS )Nr   r   r   )rZ   rH   rI   joinrG   rJ   )r6   rL   r   rZ   rI   	img_indexr   r   r   rc     s   
z%ImageWriter._create_unique_image_name)rA   rB   rC   __doc__r0   r<   r   r[   rR   rS   rU   rD   rV   rQ   rX   staticmethodboolrT   tuplerc   r   r   r   r   rF   _   s2    )
 	"rF   )rH   os.pathr-   ior   typingr   r   pdfminer.jbig2r   r   pdfminer.layoutr   pdfminer.pdfcolorr   r	   r
   r   r   pdfminer.pdfexceptionsr   pdfminer.pdftypesr   r   r   r   rg   rD   r   r   rF   r   r   r   r   <module>   s    <