o
    svXjê  ã                
   @   s¾  d dl Z d dlmZ ddlmZ ddlmZ ddlmZ ddgd	d
gddgddggZ	e	j
dd„ dd� e	D ]|\ZZziedkrQd dlmZmZ d dlmZmZmZ nPed
krhd dlmZmZ d dlmZmZmZ n9edkr…d dlmZmZ d dlmZmZmZ edddƒ nedkr¡d dlmZmZ d dlmZmZmZ edddƒ W n eefy­   Y q5w dZ ndZdZd+dd„Zdd„ Zdd „ Zd!d"„ Z d#d$„ Z!erÕG d%d&„ d&eƒZ"d'd(„ Z#d)d*„ Z$dS ),é    N)ÚBytesIOé   )ÚImage)Ú	deprecate)Úis_pathÚ6ÚPyQt6Úside6ÚPySide6Ú5ÚPyQt5Úside2ÚPySide2c                 C   s   | d t jv S )Nr   )ÚsysÚmodules)Ú
qt_version© r   úH/var/www/html/myproject/venv/lib/python3.10/site-packages/PIL/ImageQt.pyÚ<lambda>"   s    r   T)ÚkeyÚreverse)ÚQBufferÚ	QIODevice)ÚQImageÚQPixmapÚqRgbazSupport for PyQt5é
   zPyQt6 or PySide6zSupport for PySide2Féÿ   c                 C   s   t | |||ƒd@ S )zA(Internal) Turns an RGB color into a Qt compatible color integer.l   ÿÿ )r   )ÚrÚgÚbÚar   r   r   Úrgb>   s   r"   c                 C   s”   t ƒ }tdkrztj}W n ty   tj}Y nw t}| |j¡ |  ¡ r,|  	|d¡ n|  	|d¡ t
ƒ }| | ¡ ¡ | ¡  | d¡ t |¡S )z1
    :param im: QImage or PIL ImageQt object
    r   ÚpngÚppmr   )r   r   r   ÚOpenModeFlagÚAttributeErrorÚOpenModeÚopenÚ	ReadWriteÚhasAlphaChannelÚsaver   ÚwriteÚdataÚcloseÚseekr   )ÚimÚbufferÚqt_openmoder    r   r   r   Ú
fromqimageE   s"   

ÿ

r3   c                 C   ó   t | ƒS ©N)r3   ©r0   r   r   r   Úfromqpixmapa   ó   r7   c                 C   s”   dddddœ| }|| }t |dƒ\}}||rdnd }| d }|s%| S g }	tt| ƒ| ƒD ]}
|	 | |
| |
d | … d|  ¡ q/d |	¡S )	zE
    converts each scanline of data from 8 bit to 32 bit aligned
    r   é   é   )Ú1ÚLÚPúI;16r   é   ó    ó    )ÚdivmodÚrangeÚlenÚappendÚjoin)ÚbytesÚwidthÚmodeÚbits_per_pixelÚbits_per_lineÚfull_bytes_per_lineÚremaining_bits_per_lineÚbytes_per_lineÚextra_paddingÚnew_dataÚir   r   r   Ú
align8to32o   s   
ÿÿ
rR   c                 C   s°  d }d }d}t | dƒrt|  ¡ dƒ} t| ƒrt | ¡} d}tdkr$tjnt}| j	dkr/|j
}nŒ| j	dkrJ|j}g }tdƒD ]}| t|||ƒ¡ q=nq| j	d	krq|j}g }|  ¡ }td
t|ƒdƒD ]}| t|||d … Ž ¡ q`nJ| j	dkr…|  d¡} |  dd¡}|j}n6| j	dkr”|  dd¡}|j}n'| j	dkr©t |dƒr©|  dd„ ¡} |j}n|r¯|  ¡  dt| j	ƒ› �}t|ƒ‚| j}	|pÊt|  ¡ |	d
 | j	ƒ}
|rÑ|  ¡  |
|	||dœS )NFÚtoUtf8zutf-8Tr   r;   r<   é   r=   r   é   ÚRGBÚRGBAÚrawÚBGRAr>   ÚFormat_Grayscale16c                 S   s   | d S )NrT   r   )rQ   r   r   r   r   °   s    z"_toqclass_helper.<locals>.<lambda>zunsupported image mode )r-   ÚsizeÚformatÚ
colortable)ÚhasattrÚstrrS   r   r   r(   r   r   ÚFormatrI   ÚFormat_MonoÚFormat_Indexed8rC   rE   r"   Ú
getpaletterD   ÚconvertÚtobytesÚFormat_RGB32ÚFormat_ARGB32ÚpointrZ   r.   ÚreprÚ
ValueErrorr[   rR   )r0   r-   r]   Úexclusive_fpÚ	qt_formatr\   rQ   ÚpaletteÚmsgr[   Ú__datar   r   r   Ú_toqclass_helper‹   sV   



ÿ
ÿ


rp   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚImageQtc                    sX   t |ƒ}|d | _tƒ  | j|d d |d d |d ¡ |d r*|  |d ¡ dS dS )zò
            An PIL image wrapper for Qt.  This is a subclass of PyQt's QImage
            class.

            :param im: A PIL Image object, or a file name (given either as
                Python string or a PyQt string object).
            r-   r[   r   r   r\   r]   N)rp   Ú_ImageQt__dataÚsuperÚ__init__ÚsetColorTable)Úselfr0   Úim_data©Ú	__class__r   r   rt   Ã   s   


üÿzImageQt.__init__)Ú__name__Ú
__module__Ú__qualname__rt   Ú__classcell__r   r   rx   r   rq   Â   s    rq   c                 C   r4   r5   )rq   r6   r   r   r   ÚtoqimageÛ   r8   r~   c                 C   s   t | ƒ}t |¡S r5   )r~   r   Ú	fromImage)r0   Úqimager   r   r   Ú	toqpixmapß   s   
r�   )r   )%r   Úior   Ú r   Ú
_deprecater   Ú_utilr   Úqt_versionsÚsortr   Ú	qt_moduleÚPyQt6.QtCorer   r   ÚPyQt6.QtGuir   r   r   ÚPySide6.QtCoreÚPySide6.QtGuiÚPyQt5.QtCoreÚPyQt5.QtGuiÚPySide2.QtCoreÚPySide2.QtGuiÚImportErrorÚRuntimeErrorÚqt_is_installedr"   r3   r7   rR   rp   rq   r~   r�   r   r   r   r   Ú<module>   sX   ü€ÿ
5