o
    h*                  
   @   s  d dl 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 ]p\Z	Z
z]e
dkrKd dlmZmZ d dlmZmZmZ nDe
d	krbd dlmZmZ d dlmZmZmZ n-e
dkryd dlmZmZ d dlmZmZmZ ne
dkrd dlmZmZ d dlmZmZmZ W n eefy   Y q/w dZ ndZdZ	d&ddZdd Zdd Zdd Zdd ZerG d d! d!eZ d"d# Z!d$d% Z"dS )'    N)BytesIO   )Image)isPath6ZPyQt6Zside6ZPySide65ZPyQt5Zside2ZPySide2c                 C   s   | d t jv S )Nr   )sysmodules)
qt_version r   S/var/www/html/magazine_api/magazine_env/lib/python3.10/site-packages/PIL/ImageQt.py<lambda>!   s    r   T)keyreverse)QBuffer	QIODevice)QImageQPixmapqRgbaF   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   rgb9   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   Zpngppmr   )r   r
   r   ZOpenModeFlagAttributeErrorZOpenModeopenZ	ReadWriteZhasAlphaChannelsaver   writedatacloseseekr   )imbufferZqt_openmoder   r   r   r   
fromqimage@   s"   



r%   c                 C      t | S N)r%   r#   r   r   r   fromqpixmap\      r)   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modeZbits_per_pixelZbits_per_lineZfull_bytes_per_lineZremaining_bits_per_lineZbytes_per_lineZextra_paddingZnew_datair   r   r   
align8to32j   s   

r=   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=no| j	d	krq|j}g }|  }td
t|dD ]}|t|||d    q`nH| j	dkr| d} | dd}|j}n4| j	dkr| dd}|j}n%| j	dkrt |dr| dd } |j}n|r|   tdt| j	 | j}|pt|  |d
 | j	}	|r|   |	|||dS )NFtoUtf8zutf-8Tr   r-   r.      r/   r      RGBZRGBArawZBGRAr0   Format_Grayscale16c                 S   s   | d S )Nr?   r   )r<   r   r   r   r      s    z"_toqclass_helper.<locals>.<lambda>zunsupported image mode )r    sizeformat
colortable)hasattrstrr>   r   r   r   r
   r   Formatr;   ZFormat_MonoZFormat_Indexed8r5   r7   r   Z
getpaletter6   converttobytesZFormat_RGB32ZFormat_ARGB32pointrC   r!   
ValueErrorreprrD   r=   )
r#   r    rF   Zexclusive_fpZ	qt_formatrE   r<   paletterD   Z__datar   r   r   _toqclass_helper   sT   







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    rD   r   r   rE   rF   N)rP   Z_ImageQt__datasuper__init__ZsetColorTable)selfr#   Zim_data	__class__r   r   rS      s   


zImageQt.__init__)__name__
__module____qualname__rS   __classcell__r   r   rU   r   rQ      s    rQ   c                 C   r&   r'   )rQ   r(   r   r   r   toqimage   r*   r[   c                 C   s   t | }t|S r'   )r[   r   Z	fromImage)r#   Zqimager   r   r   	toqpixmap   s   
r\   )r   )#r   ior    r   Z_utilr   Zqt_versionssortr
   Z	qt_moduleZPyQt6.QtCorer   r   ZPyQt6.QtGuir   r   r   ZPySide6.QtCoreZPySide6.QtGuiZPyQt5.QtCoreZPyQt5.QtGuiZPySide2.QtCoreZPySide2.QtGuiImportErrorRuntimeErrorZqt_is_installedr   r%   r)   r=   rP   rQ   r[   r\   r   r   r   r   <module>   sR   
4