403Webshell
Server IP : 127.0.0.1  /  Your IP : 216.73.216.109
Web Server : Apache/2.4.54 (Win64) OpenSSL/1.1.1q PHP/8.1.10
System : Windows NT DESKTOP-E5T4RUN 10.0 build 19045 (Windows 10) AMD64
User : SERVERWEB ( 0)
PHP Version : 8.1.10
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : OFF |  Perl : OFF |  Python : OFF |  Sudo : OFF |  Pkexec : OFF
Directory :  C:/cygwin64/lib/python3.9/site-packages/PIL/__pycache__/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : C:/cygwin64/lib/python3.9/site-packages/PIL/__pycache__/PngImagePlugin.cpython-39.pyc
a

h�at��@sddlZddlZddlZddlZddlZddlZddlmZmZm	Z	m
Z
mZddlm
ZddlmZddlmZddlmZddlmZe�e�Ze�d	�jZd
Zddd
ddddddddddddd�Ze�d�Ze	jZ de Z!dZ"dZ#dZ$dZ%dZ&dd�Z'dNd d!�Z(Gd"d#�d#�Z)Gd$d%�d%e*�Z+Gd&d'�d'�Z,Gd(d)�d)e)�Z-d*d+�Z.Gd,d-�d-e	j	�Z/d.d/d0d1d2d3d4d4d5d6d7d8d9d:d;�Z0d<d=�Z1Gd>d?�d?�Z2Gd@dA�dA�Z3dBdC�Z4dDdE�Z5e1dFfdGdH�Z6dIdJ�Z7e�8e/j9e/e.�e�:e/j9e6�e�;e/j9e5�e�<e/j9dKdLg�e�=e/j9dM�dS)O�N�)�Image�
ImageChops�	ImageFile�ImagePalette�
ImageSequence)�i16be)�i32be)�o8)�o16be)�o32bes\w\w\w\ws�PNG

)�1r
)�L�L;2)r�L;4)rr)�I�I;16B)�RGBr)rzRGB;16B)�P�P;1)r�P;2)r�P;4)rr)�LAr)�RGBAzLA;16B)rr)rzRGBA;16B))rr)�r)�r)�r)�r)rr)rr)r�)rr)rr)rr)rr)rr)r�)rrs^�*�*$�@rcCs&t��}|�|t�}|jr"td��|S)NzDecompressed Data Too Large)�zlib�
decompressobj�
decompress�MAX_TEXT_CHUNK�unconsumed_tail�
ValueError)�sZdobjZ	plaintext�r(�6/usr/lib/python3.9/site-packages/PIL/PngImagePlugin.py�_safe_zlib_decompress�s
r*cCst�||�d@S)Nl��)r!�crc32)�dataZseedr(r(r)�_crc32�sr-c@s^eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zddd�ZdS)�ChunkStreamcCs||_g|_dS�N)�fp�queue��selfr0r(r(r)�__init__�szChunkStream.__init__cCs~d}|jr(|j��\}}}|j�|�n*|j�d�}|dd�}|j��}t|�}t|�sttj	stt
dt|��d���|||fS)z.Fetch a new chunk. Returns header information.Nrrzbroken PNG file (chunk �))r1�popr0�seek�read�tell�i32�is_cidr�LOAD_TRUNCATED_IMAGES�SyntaxError�repr)r3�cid�pos�lengthr'r(r(r)r8�s
zChunkStream.readcCs|Sr/r(�r3r(r(r)�	__enter__�szChunkStream.__enter__cGs|��dSr/)�close)r3�argsr(r(r)�__exit__�szChunkStream.__exit__cCsd|_|_|_dSr/)r1�crcr0rBr(r(r)rD�szChunkStream.closecCs|j�|||f�dSr/)r1�append�r3r?r@rAr(r(r)�push�szChunkStream.pushcCs*t�d|||�t|d|�d��||�S)z"Call the appropriate chunk handlerzSTREAM %r %s %sZchunk_�ascii)�logger�debug�getattr�decoderIr(r(r)�call�szChunkStream.callc
Cs�tjr&|dd?d@r&|�||�dSz>t|t|��}t|j�d��}||krbtdt|��d���Wn<t	j
y�}z"tdt|��d��|�WYd}~n
d}~00dS)	zRead and verify checksumr�rNrz(broken PNG file (bad header checksum in r5z(broken PNG file (incomplete checksum in )rr<�crc_skipr-r:r0r8r=r>�struct�error)r3r?r,Zcrc1Zcrc2�er(r(r)rG�s ���zChunkStream.crccCs|j�d�dS)z3Read checksum.  Used if the C module is not presentrN)r0r8)r3r?r,r(r(r)rR�szChunkStream.crc_skip�IENDc
Csxg}z|��\}}}Wn0tjyF}ztd�|�WYd}~n
d}~00||krRqt|�|t�|j|��|�|�q|S)Nztruncated PNG file)	r8rSrT�OSErrorrGr�
_safe_readr0rH)r3ZendchunkZcidsr?r@rArUr(r(r)�verify�s zChunkStream.verifyN)rV)
�__name__�
__module__�__qualname__r4r8rCrFrDrJrPrGrRrYr(r(r(r)r.�sr.c@seZdZdZeddd��ZdS)�iTXtzq
    Subclass of string to allow iTXt chunks to look like strings while
    keeping their extra information

    NcCst�||�}||_||_|S)z�
        :param cls: the class to use when creating the instance
        :param text: value for this key
        :param lang: language code
        :param tkey: UTF-8 version of the key name
        )�str�__new__�lang�tkey)�cls�textr`rar3r(r(r)r_�s	ziTXt.__new__)NN)rZr[r\�__doc__�staticmethodr_r(r(r(r)r]�sr]c@s6eZdZdZdd�Zd
dd�Zddd	�Zdd
d�ZdS)�PngInfoz<
    PNG chunk container (for use with save(pnginfo=))

    cCs
g|_dSr/)�chunksrBr(r(r)r4	szPngInfo.__init__FcCs*||g}|r|�d�|j�t|��dS)a"Appends an arbitrary chunk. Use with caution.

        :param cid: a byte string, 4 bytes long.
        :param data: a byte string of the encoded data
        :param after_idat: for use with private chunks. Whether the chunk
                           should be written after IDAT

        TN)rHrg�tuple)r3r?r,�
after_idat�chunkr(r(r)�adds

zPngInfo.add�cCs�t|t�s|�dd�}t|t�s,|�dd�}t|t�sB|�dd�}t|t�sX|�dd�}|r�|�d|d|d|dt�|��n$|�d|d|d|d|�dS)	z�Appends an iTXt chunk.

        :param key: latin-1 encodable text key name
        :param value: value for this key
        :param lang: language code
        :param tkey: UTF-8 version of the key name
        :param zip: compression flag

        �latin-1�strict�utf-8�iTXts�sN)�
isinstance�bytes�encoderkr!�compress)r3�key�valuer`ra�zipr(r(r)�add_itxts



 �zPngInfo.add_itxtcCs�t|t�r"|j|||j|j|d�St|t�s`z|�dd�}Wn"ty^|j|||d�YS0t|t�sv|�dd�}|r�|�d|dt	�
|��n|�d|d|�dS)	z�Appends a text chunk.

        :param key: latin-1 encodable text key name
        :param value: value for this key, text or an
           :py:class:`PIL.PngImagePlugin.iTXt` instance
        :param zip: compression flag

        )rxrmrn�zTXt��tEXtrqN)rrr]ryr`rarsrt�UnicodeErrorrkr!ru)r3rvrwrxr(r(r)�add_text7s	


zPngInfo.add_textN)F)rlrlF)F)rZr[r\rdr4rkryr~r(r(r(r)rfs


rfcs�eZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Z�ZS)+�	PngStreamcsRt��|�i|_i|_d|_d|_d|_d|_d|_d|_	d|_
d|_d|_dS)N�rrr)
�superr4�im_info�im_text�im_size�im_mode�im_tile�
im_palette�im_custom_mimetype�im_n_frames�_seq_num�rewind_state�text_memoryr2��	__class__r(r)r4XszPngStream.__init__cCs.|j|7_|jtkr*td|j�d���dS)Nz%Too much memory used in text chunks: z>MAX_TEXT_MEMORY)r��MAX_TEXT_MEMORYr&)r3Zchunklenr(r(r)�check_text_memoryis
��zPngStream.check_text_memorycCs|j��|j|jd�|_dS)N)�info�tile�seq_num)r��copyr�r�r�rBr(r(r)�save_rewindqs�zPngStream.save_rewindcCs(|jd|_|jd|_|jd|_dS)Nr�r�r�)r�r�r�r�rBr(r(r)�rewindxszPngStream.rewindcCs�t�|j|�}|�d�}t�d|d|��t�d||�||}|dkr\td|�d���zt||dd��}Wn6ty�tj	r�d}n�Ynt
jy�d}Yn0||jd<|S)	NrqziCCP profile name %rzCompression method %sr�Unknown compression method z in iCCP chunkr�icc_profile)
rrXr0�findrLrMr=r*r&r<r!rTr�)r3r@rAr'�i�comp_methodr�r(r(r)�
chunk_iCCP}s"


zPngStream.chunk_iCCPcCs~t�|j|�}t|d�t|d�f|_z t|d|df\|_|_WntyVYn0|drjd|j	d<|drzt
d	��|S)
Nrrr�	�r�	interlace�zunknown filter category)rrXr0r:r��_MODESr��
im_rawmode�	Exceptionr�r=�r3r@rAr'r(r(r)�
chunk_IHDR�s 
zPngStream.chunk_IHDRcCs`d|jvr"d|jd||jfg}n*|jdur6d|jd<dd|j||jfg}||_||_t�dS)N�bboxrxT�
default_imager�)r�r�r�r�r�Zim_idat�EOFError)r3r@rAr�r(r(r)�
chunk_IDAT�s


zPngStream.chunk_IDATcCst�dSr/)r�)r3r@rAr(r(r)�
chunk_IEND�szPngStream.chunk_IENDcCs&t�|j|�}|jdkr"d|f|_|S)Nrr)rrXr0r�r�r�r(r(r)�
chunk_PLTE�s

zPngStream.chunk_PLTEcCs�t�|j|�}|jdkrLt�|�r@|�d�}|dkrJ||jd<q�||jd<nD|jdvrft|�|jd<n*|jdkr�t|�t|d�t|d�f|jd<|S)	Nrrqr�transparency�r
rrrrr)	rrXr0r��_simple_palette�matchr�r��i16)r3r@rAr'r�r(r(r)�
chunk_tRNS�s




 zPngStream.chunk_tRNScCs$t�|j|�}t|�d|jd<|S)N�j�@Zgamma�rrXr0r:r�r�r(r(r)�
chunk_gAMA�szPngStream.chunk_gAMAcCsBt�|j|�}t�dt|�d|�}tdd�|D��|jd<|S)Nz>%dIrcss|]}|dVqdS)r�Nr()�.0�eltr(r(r)�	<genexpr>��z'PngStream.chunk_cHRM.<locals>.<genexpr>Zchromaticity)rrXr0rS�unpack�lenrhr�)r3r@rAr'Zraw_valsr(r(r)�
chunk_cHRM�szPngStream.chunk_cHRMcCs t�|j|�}|d|jd<|S)NrZsrgb�rrXr0r�r�r(r(r)�
chunk_sRGB�szPngStream.chunk_sRGBcCsjt�|j|�}t|d�t|d�}}|d}|dkrP|d|df}||jd<n|dkrf||f|jd<|S)Nrrrr�
F%u�?�dpiZaspectr�)r3r@rAr'�px�pyZunitr�r(r(r)�
chunk_pHYs�szPngStream.chunk_pHYscCs�t�|j|�}z|�dd�\}}Wnty<|}d}Yn0|r�|�dd�}|�dd�}|dkrf|n||j|<||j|<|�t	|��|S)Nrqrr�rmrn�replace�exif)
rrXr0�splitr&rOr�r�r�r�)r3r@rAr'�k�vZv_strr(r(r)�
chunk_tEXt�s

zPngStream.chunk_tEXtcCs�t�|j|�}z|�dd�\}}Wnty<|}d}Yn0|rL|d}nd}|dkrhtd|�d���zt|dd��}Wn6ty�tjr�d}n�Yntj	y�d}Yn0|r�|�
dd�}|�
dd	�}||j|<|j|<|�
t|��|S)
Nrqrr�rr�z in zTXt chunkrmrnr�)rrXr0r�r&r=r*r<r!rTrOr�r�r�r�)r3r@rAr'r�r�r�r(r(r)�
chunk_zTXts2


zPngStream.chunk_zTXtcCszt�|j|�}}z|�dd�\}}Wnty<|YS0t|�dkrN|S|d|d|dd�}}}z|�dd�\}}	}
Wnty�|YS0|dk�r�|dk�r�zt|
�}
Wn:ty�tjr�|YS�Yntj	�y�|YS0n|Sz4|�
dd�}|�
dd�}|	�
dd�}	|
�
dd�}
Wnt�yJ|YS0t|
||	�|j
|<|j|<|�t|
��|S)Nrqrrrrmrnro)rrXr0r�r&r�r*r<r!rTrOr}r]r�r�r�)r3r@rA�rr'r��cf�cmr`Ztkr�r(r(r)�
chunk_iTXt3sB
 



zPngStream.chunk_iTXtcCs t�|j|�}d||jd<|S)N�Exifr�r�r�r(r(r)�
chunk_eXIf\szPngStream.chunk_eXIfcCsrt�|j|�}|jdur,d|_t�d�|St|�}|dksD|dkrRt�d�|S||_t|d�|jd<d|_|S)Nz4Invalid APNG, will use default PNG image if possiblerlr�loopz
image/apng)	rrXr0r��warnings�warnr:r�r�)r3r@rAr'�n_framesr(r(r)�
chunk_acTLbs


zPngStream.chunk_acTLc
Cst�|j|�}t|�}|jdur(|dks@|jdurH|j|dkrHtd��||_t|d�t|d�}}t|d�t|d�}}|j\}	}
|||	ks�|||
kr�td��||||||f|jd	<t|d
�t|d�}}|dkr�d}t	|�t	|�d
|jd<|d|jd<|d|jd<|S)Nrr�#APNG contains frame sequence errorsrrr�rzAPNG contains invalid framesr����d���duration��disposal��blend)
rrXr0r:r�r=r�r�r��float)
r3r@rAr'�seq�widthZheightr�r�Zim_wZim_hZ	delay_numZ	delay_denr(r(r)�
chunk_fcTLqs,��
zPngStream.chunk_fcTLcCsFt�|jd�}t|�}|j|dkr,td��||_|�|d|d�S)Nrrr�)rrXr0r:r�r=r�)r3r@rAr'r�r(r(r)�
chunk_fdAT�szPngStream.chunk_fdAT)rZr[r\r4r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r��
__classcell__r(r(r�r)rWs*
	
")rcCs|dd�tkS)Nr)�_MAGIC)�prefixr(r(r)�_accept�sr�cs�eZdZdZdZdd�Zedd��Zdd�Zd	d
�Z	ddd
�Z
dd�Zdd�Zdd�Z
dd�Zdd�Z�fdd�Zdd�Zdd�Z�ZS)�PngImageFileZPNGzPortable network graphicsc	Cs�t|j�d��std��|j|_d|_g|_t|j�|_|j��\}}}z|j�	|||�}Wndt
yrYq�YnPty�t�
d|||�t�|j|�}|dd���r�|j�||f�Yn0|j�||�q8|jj|_|jj|_|jj|_d|_|jj|_|jj|_|jj�pd|_|j� dd�|_!|jj"�rN|jj"\}}t#�$||�|_%|d	k�rd|d
|_&n||_&|jjdu�r�d|_'|j�(�|j&|_)|j�*�|_+|j!�r�|jd7_|�,d�|jdk|_-dS)Nrznot a PNG filer�%r %s %s (unknown)rrr�F�fdATr).r�r0r8r=�_PngImageFile__fp�_PngImageFile__frame�private_chunksr�pngrPr��AttributeErrorrLrMrrX�islowerrHrGr��moder��_sizer�r��_textr�r�r�Zcustom_mimetyper�r��getr�r�r�raw�palette�_PngImageFile__prepare_idatZ!_close_exclusive_fp_after_loadingr��_PngImageFile__rewind_idatr9�_PngImageFile__rewind�_seek�is_animated)r3r?r@rAr'�rawmoder,r(r(r)�_open�sP	








zPngImageFile._opencCsD|jdur>|jr&|j}|�|jd�|��|jr>|�|�|jS)Nr)r�r�r�r7r��load)r3�framer(r(r)rc�s

zPngImageFile.textcCsZ|jdurtd��|j�|jddd�|j��|j��|jrP|j��d|_dS)zVerify PNG fileNz)verify must be called directly after openrrr)r0�RuntimeErrorr7r�r�rYrDZ
_exclusive_fprBr(r(r)rY�s



zPngImageFile.verifycCs�|�|�sdS||jkr$|�dd�|j}t|jd|d�D]L}z|�|�Wq>ty�}z |�|�td�|�WYd}~q>d}~00q>dS)NrTrzno more images in APNG file)Z_seek_checkr�r��ranger�r7)r3r�Z
last_frame�frUr(r(r)r7s


zPngImageFile.seekFc	Cs|dkr�|rZ|j�|j�|j��|j|_d|_|jr>d|_|jj	|_
|jj|_|j|_
d|_d|_|j
�dd�|_|j
�d�|_|j
�d�|_|j
�d�|_d|_�n�||jdkr�td|����|��|jr�|j�|j|j�|j��|_|j|_
|j�rt�|j
|j�d|_d}|j
�d	�z|j��\}}}Wn tjtf�y\Y�q4Yn0|d
k�rpt d��|dk�r�|�r�td
��d}z|j�!|||�Wn�t"�y�Y�q4Ynvt �y�|dk�r�|d	8}|�r�||_Y�q4t�|j
|�Yn2t#�y.t$�%d|||�t�|j
|�Yn0�q||_|jj|_|j
�d�|_|j
�d�|_|j
�d�|_|j�szt �|jdu�r�|jt&k�r�t'|_|jt&k�r�|j��|_|�(|j|j�|_n:|jt'k�r�t)j*�+|j,|j-�|_|�(|j|j�|_nd|_dS)Nrr�Fr�r�r�rzcannot seek to frame rrVzNo more images in APNG file�fcTLzAPNG missing frame dataTr�r�).r�r7r�r�r�r�r��im�pyaccessr�r�r�r�r0�_prev_im�disposer�r�Z
dispose_op�blend_op�dispose_extentr�r&r��paster�rrXr8rSrTr=r�rP�UnicodeDecodeErrorr�rLrM�APNG_DISPOSE_OP_PREVIOUS�APNG_DISPOSE_OP_BACKGROUND�_cropr�core�fillr��size)r3r�r�Zframe_startr?r@rAr(r(r)r�s�








zPngImageFile._seekcCs|jSr/)r�rBr(r(r)r9lszPngImageFile.tellcCs0|j�d�r|jd|_|j|_tj�|�dS)z"internal: prepare to read PNG filer�)rN)r�r�Z
decoderconfigr��_PngImageFile__idatr�load_preparerBr(r(r)roszPngImageFile.load_preparecCs�|jdkr�|j�d�|j��\}}}|dvrB|j�|||�dS|dkr~z|j�|||�WntypYn0|d|_q||_q|dkr�|j}nt||j�}|j||_|j�|�S)zinternal: read more image datarr)�IDATsDDATr�r�r�)rr0r8r�rJrPr��min)r3�
read_bytesr?r@rAr(r(r)�	load_readxs$
zPngImageFile.load_readc	Cs�|jdkr|j�|j�|j�d�z|j��\}}}WntjtfyVY�q@Yn0|dkrf�q@n(|dkr�|jr�d|_|j�	|||��q@z|j�
|||�Wqty�Y�q@Yqty�|dkr�|d8}t
�|j|�Yqt�y<t�d|||�t
�|j|�}|dd����r8|j�||d	f�Yq0q|jj|_|j�sd|j��d
|_nR|j�r�|jtk�r�|�|j|j�}|j�||j|�d��|j|_|j �r�d
|_ d
S)z%internal: finished reading image datarrrVrr�r�rrTNr)!rr0r8r�rSrTr=r�r�rJrPrr�rrXr�rLrMr�r�rHr�r�rDrr�APNG_BLEND_OP_OVERrrr	r
�convertr)r3r?r@rAr'�updatedr(r(r)�load_end�sL



�zPngImageFile.load_endcCs6d|jvr|��d|jvr*d|jvr*dS|����S)Nr�zRaw profile type exif)r�r��getexifZ_get_merged_dictrBr(r(r)�_getexif�s

zPngImageFile._getexifcsd|jvr|��t���S)Nr�)r�r�r�rrBr�r(r)r�s
zPngImageFile.getexifcCsd|jvr|�|jd�SiS)z�
        Returns a dictionary containing the XMP tags.
        Requires defusedxml to be installed.
        :returns: XMP tags in a dictionary.
        zXML:com.adobe.xmp)r�Z_getxmprBr(r(r)�getxmp�s��zPngImageFile.getxmpcCsFz8z|j|jkr|j��Wnty.Yn0Wd|_nd|_0dSr/)r�r0rDr�rBr(r(r)�
_close__fp�szPngImageFile._close__fp)F)rZr[r\�formatZformat_descriptionr��propertyrcrYr7r�r9rrrrrrrr�r(r(r�r)r��s D

Z	!/r�)r
�)�L;1r")rs)rs)rs)rs)rs)rs)rs)rs)rs)rs)rs)r
r#rrrrrzI;16rrrrrrcGsJd�|�}|�tt|��|�|�|�t|t|��}|�t|��dS)z'Write a PNG chunk (including CRC field)r�N)�join�write�o32r�r-�r0r?r,rGr(r(r)�putchunks


r(c@seZdZdd�Zdd�ZdS)�_idatcCs||_||_dSr/)r0rj)r3r0rjr(r(r)r4sz_idat.__init__cCs|�|jd|�dS)Nr)rjr0�r3r,r(r(r)r%sz_idat.writeN�rZr[r\r4r%r(r(r(r)r)sr)c@seZdZdd�Zdd�ZdS)�_fdatcCs||_||_||_dSr/)r0rjr�)r3r0rjr�r(r(r)r4sz_fdat.__init__cCs*|�|jdt|j�|�|jd7_dS)Nr�r)rjr0r&r�r*r(r(r)r%sz_fdat.writeNr+r(r(r(r)r,sr,cCs@|j�d|j�d��}|j�d|j�dd��}|j�d|j�dd��}|j�d|j�dt��}|j�d|j�dt��}|r�t�|j�dg��}	nt�|g|j�dg��}	g}
d}|	D�]�}t�|�D�]�}
|
�	�}
|
j
|j
k�r
|j
dkr�|
j|j
|jd	�}
n|
�|j
�}
|j�	�}t
|ttf��r0|||d<t
|ttf��rL|||d<t
|ttf��rh|||d<|d
7}|
�r�|
d}|d�d�}|d�d�}|tk�r�t|
�d
k�r�t}|tk�r|d}tj�d|jd�}|d}|�r�|�|�}n
d|j}|�||�n |tk�r$|
dd}n|d}t�|
�d�|�d��}|��}|�s�||�d�k�r�||�d�k�r�t
|ttf�r�|dd|d7<q�nd}|
�|
||d��q�q�||dtt|
��t|��|�r�t�|t ||�dd|jd|fg�d}t!|
�D�]2\}}|d}
|d�s.d|
j}n|d}|
�|�}
|
j}|d}t"t#|�d|���}|�d|�}|�d|�}||dt|�t|d�t|d
�t|d�t|d
�t$|�t$d�t%|�t%|��|d
7}|dk�r|�st�|
t ||�dd|
jd|fg�n0t&|||�}t�|
|dd|
jd|fg�|j'}�qdS)Nr�r�rr�r�r�Z
append_imagesr)r�r����encoderinforrr)rrrrr�r����r)rr�r.sacTLrxrr�)(r.r�r��APNG_DISPOSE_OP_NONE�APNG_BLEND_OP_SOURCE�	itertools�chainr�Iteratorr�r�rr�rr�listrhrr�r
rrrrZcropr
rZsubtract_moduloZgetbboxrHr&r�_saver)�	enumerate�int�round�o16r
r,r�)rr0rjr�r�r�r�r�r�r3Z	im_framesZframe_countZim_seqZim_framer.ZpreviousZ
prev_disposalZ
prev_blendZbase_imrr�Zdeltar�r�Z
frame_datarZframe_durationZframe_disposalZframe_blendZfdat_chunksr(r(r)�_write_multiple_frames$s��





����
�$





�
��r;cCst|||dd�dS)NT)�save_all)r6)rr0�filenamer(r(r)�	_save_all�sr>Fc
Csp|j}|dkr�d|jvr.td|jd>d�}n.|jrXttt|j��d�dd�d�}nd}|dkr�|dkrrd}n|dkr�d}nd}|�d	|��}|j�d
d�|j�dd
�|j�dd
�|j�dd�f|_zt	|\}}Wn8t
�y}	ztd|�d��|	�WYd}	~	n
d}	~	00|�t
�||dt|jd�t|jd�|ddd�gd�}
|j�d|j�d��}|�r�d}|dt�|�}
||d|
�|
�d�|j�d�}|�r8gd�}|jD]�}|dd�\}}
||
v�r�|
�|�||||
�nH||v�r||||
�n0|dd����r�|dd�}|�s�||||
��q�|jdk�r�|d}|j�d�d|�}t|�|k�rz|d7}�q`||d|�|j�d |j�d d��}|�s�|dk�r�|jdk�r|}t|t��r�||d!|d|��n0tdtd"|��}d#|d}||d!|d|��nz|jd$v�r@tdtd%|��}||d!t|��nL|jdk�rx|\}}}||d!t|�t|�t|��nd |jv�r�td&��nB|jdk�r�|j��d'k�r�|j�d'd(�}|}||d!|d|��|j�d)�}|�r||d*tt|dd+d,��tt|dd+d,��d-�|�rfd.d/g}
|jD]6}|dd�\}}
||
v�r.|
�|�||||
��q.|j�d0|j�d0��}|�r�t|tj��r�|�d1�}|� d2��r�|d3d�}||d4|�|�r�t!||||�n$t"�#|t$||�d5d6|jd|fg�|�rL|jD]F}|dd�\}}
|dd����r|dd�}|�r||||
��q||d7d�t%|d8��rl|�&�dS)9Nr�bitsr�rrrr�;�optimizeFZcompress_levelr-Z
compress_typeZ
dictionaryr�zcannot write mode z as PNGsIHDRrrq)scHRMsgAMAssBIT�sRGBstIMEr�sICC Profiler{siCCPrCZpnginfo)ssPLTrpr|rzrsPLTEr�stRNS���r�i��z%cannot use transparency for this moder�Ar�spHYsr�g�?�sbKGDshISTr�rr�rseXIfrxr�rV�flush)'r�r.rr��maxr�Zgetdatar�Z
encoderconfig�	_OUTMODES�KeyErrorrWr%r�r&rr�r!ru�removergr�rZ
getpaletterrrsr:Zgetpalettemoder8rZExif�tobytes�
startswithr;rr6r)�hasattrrH)rr0r=rjr<r�Zcolorsr?r�rUrgZicc�namer,r�Zchunks_multiple_allowedZ
info_chunkr?riZpalette_byte_numberZ
palette_bytesr�Zalpha_bytesZalphaZredZgreenZbluer�r�r(r(r)r6�s�
$�(
�





"
�



$
r6cKsFGdd�d�}dd�}|�}z||_t||d|�W|`n|`0|jS)z4Return a list of PNG chunks representing this image.c@s eZdZgZdd�Zdd�ZdS)zgetchunks.<locals>.collectorcSsdSr/r(r*r(r(r)r%_sz"getchunks.<locals>.collector.writecSs|j�|�dSr/)r,rH)r3rjr(r(r)rHbsz#getchunks.<locals>.collector.appendN)rZr[r\r,r%rHr(r(r(r)�	collector\srQcWs0d�|�}tt|t|���}|�|||f�dS)Nr�)r$r&r-rHr'r(r(r)rHes
zgetchunks.<locals>.appendN)r.r6r,)r�paramsrQrHr0r(r(r)�	getchunksYs	rSz.pngz.apngz	image/png)r)>r2Zlogging�rerSr�r!rlrrrrrZ_binaryrr�r	r:r
rr:rr&Z	getLoggerrZrL�compiler�r;r�r�r�Z	SAFEBLOCKr$r�r0r
rr1rr*r-r.r^r]rfrr�r�rJr(r)r,r;r>r6rSZ
register_openr Z
register_saveZregister_save_allZregister_extensionsZ
register_mimer(r(r(r)�<module>"s�
�

\T?V�
3

Youez - 2016 - github.com/yon3zu
LinuXploit