o
    )iL                  	   @   s   d dl mZ d dlmZ d dlmZ d dlZd dlZd dlm	Z	 ddl
mZ 	dd	e	j	d
edede	j	fddZ	dd	e	j	deeeeef ee f de	j	fddZd	e	j	defddZG dd dee	j	 ZG dd deej ZdS )    )BytesIO)Path)UnionN)Image   )MediaIOimagesize_factor	transposereturnc                 C   sF   t | j| }t | j| }| ||f} |dkr!| t|} | S )z8Rescale the dimensions of an image by a constant factor.r   )intwidthheightresizer   r   Z	Transpose)r	   r
   r   Z	new_widthZ
new_height r   a/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/vllm/multimodal/image.pyrescale_image_size   s   r      r   r   background_colorc                 C   s8   | j dksJ td| j|}|j| |  d d |S )z:Convert an RGBA image to RGB with filled background color.RGBARGB   )mask)moder   newsizeZpastesplit)r	   r   Z	convertedr   r   r   rgba_to_rgb   s   r   to_modec                 C   s2   | j |kr| S | j dkr|dkrt| S | |S )Nr   r   )r   r   convert)r	   r    r   r   r   convert_image_mode&   s
   

r"   c                       s   e Zd Zddeddf fddZdejdejfdd	Zd
edejfddZded
edejfddZ	de
dejfddZdddejdedefddZ  ZS )ImageMediaIOr   
image_moder   Nc                    sn   t    || _|| _|dd}t|trt|}t|tr.t|dkr.t	dd |D s2t
d|| _d S )Nrgba_background_colorr   r   c                 s   s2    | ]}t |tod |  kodkn  V  qdS )r   r   N)
isinstancer   ).0cr   r   r   	<genexpr>E   s    *z(ImageMediaIO.__init__.<locals>.<genexpr>zRrgba_background_color must be a list or tuple of 3 integers in the range [0, 255].)super__init__r$   kwargsgetr&   listtuplelenall
ValueErrorr%   )selfr$   r,   Zrgba_bg	__class__r   r   r+   1   s   


zImageMediaIO.__init__r	   c                 C   s<   |j | jkr|S |j dkr| jdkrt|| jS t|| jS )z0Convert image mode with custom background color.r   r   )r   r$   r   r%   r"   )r3   r	   r   r   r   _convert_image_modeL   s
   z ImageMediaIO._convert_image_modedatac                 C   s    t t|}|  | |S N)r   openr   loadr6   )r3   r7   r	   r   r   r   
load_bytesU   s   
zImageMediaIO.load_bytes
media_typec                 C      |  tj|ddS NT)validater;   pybase64	b64decoder3   r<   r7   r   r   r   load_base64Z      zImageMediaIO.load_base64filepathc                 C   s   t |}|  | |S r8   )r   r9   r:   r6   )r3   rF   r	   r   r   r   	load_file]   s   

zImageMediaIO.load_fileZJPEG)image_formatmediarH   c                C   sX   |}t  }| |}||| | }W d    n1 sw   Y  t|dS Nzutf-8)r   r6   savegetvaluerA   	b64encodedecode)r3   rI   rH   r	   bufferr7   r   r   r   encode_base64b   s   

zImageMediaIO.encode_base64)r   )__name__
__module____qualname__strr+   r   r6   bytesr;   rD   r   rG   rP   __classcell__r   r   r4   r   r#   /   s    		r#   c                       sr   e Zd Zd fddZdedejfddZdededejfd	d
Z	de
dejfddZdejdefddZ  ZS )ImageEmbeddingMediaIOr   Nc                    s   t    d S r8   )r*   r+   )r3   r4   r   r   r+   t      zImageEmbeddingMediaIO.__init__r7   c                 C   s   t |}tj|ddS NT)Zweights_only)r   torchr:   )r3   r7   rO   r   r   r   r;   w   s   z ImageEmbeddingMediaIO.load_bytesr<   c                 C   r=   r>   r@   rC   r   r   r   rD   {   rE   z!ImageEmbeddingMediaIO.load_base64rF   c                 C   s   t j|ddS rY   )rZ   r:   )r3   rF   r   r   r   rG   ~   rX   zImageEmbeddingMediaIO.load_filerI   c                 C   s   t | dS rJ   )rA   rM   numpyrN   )r3   rI   r   r   r   rP      rE   z#ImageEmbeddingMediaIO.encode_base64)r   N)rQ   rR   rS   r+   rU   rZ   Tensorr;   rT   rD   r   rG   rP   rV   r   r   r4   r   rW   r   s    rW   )r   )r   )ior   pathlibr   typingr   rA   rZ   ZPILr   baser   floatr   r   r/   r.   r   rT   r"   r#   r\   rW   r   r   r   r   <module>   s4   


	C