o
    e%
                     @   sD   d Z ddlZddlmZ ddlmZ ddlmZ G dd deZdS )	ai  Image object.

Data structure defined in link https://pymupdf.readthedocs.io/en/latest/textpage.html::

    {
        'type': 1,
        'bbox': (x0,y0,x1,y1),
        'width': w,
        'height': h,
        'image': b'',

        # --- discard properties ---
        'ext': 'png',
        'colorspace': n,
        'xref': xref, 'yref': yref, 'bpc': bpc
    }
    N)BytesIO   )docx)Elementc                       sb   e Zd ZdZddef fddZedd Zdd	 Z fd
dZ	de
f fddZdd Z  ZS )ImagezBase image object.Nrawc                    sb   |d u ri }| dd| _| dd| _| dd}t|tr!|nt| | _t	 
| d S )Nwidthg        heightimage    )getr   r	   
isinstancebytesbase64	b64decodeencoder
   super__init__)selfr   r
   	__class__ DD:\Projects\ConvertPro\env\Lib\site-packages\pdf2docx/image/Image.pyr      s   zImage.__init__c                 C   s   dS )z%Get an image placeholder ``<image>``.z<image>r   )r   r   r   r   text,   s   z
Image.textc                 C   s(   |j | _ |j| _|j| _| |j | S )zqUpdate with image block/span.
        
        Args:
            image (Image): Target image block/span.
        )r   r	   r
   Zupdate_bboxbbox)r   r
   r   r   r   
from_image2   s
   zImage.from_imagec                    s0   t   }|| j| jt| j d |S )zStore image with base64 encode.

        * Encode image bytes with base64 -> base64 bytes
        * Decode base64 bytes -> str -> so can be serialized in json formart
        )r   r	   r
   )	r   storeupdater   r	   r   	b64encoder
   decode)r   resr   r   r   r   ?   s   
zImage.storecolorc                    sV   | j \}}}}|j||f||f|dd |j||f||f|dd t j||d dS )zPlot image bbox with diagonal lines (for debug purpose).
        
        Args: 
            page (fitz.Page): Plotting page.
        g      ?)r!   r   )strokeN)r   Z	draw_liner   plot)r   pager!   x0y0x1y1r   r   r   r#   O   s   z
Image.plotc                 C   s2   t |t| j| jj| jj | jj| jj  dS )z#Add image span to a docx paragraph.N)	r   Z	add_imager   r
   r   r'   r%   r(   r&   )r   Z	paragraphr   r   r   	make_docx[   s   2zImage.make_docx)N)__name__
__module____qualname____doc__dictr   propertyr   r   r   tupler#   r)   __classcell__r   r   r   r   r      s    
r   )	r-   r   ior   commonr   Zcommon.Elementr   r   r   r   r   r   <module>   s   