HEX
Server: Apache
System: Linux srv1.prosuiteplus.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: prosuiteplus (1001)
PHP: 8.3.20
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/PIL/__pycache__/PngImagePlugin.cpython-38.pyc
U

g�
^9k�@s�ddlZddlZddlZddlZddlmZmZmZddlm	Z	m
ZmZ
mZmZe�e�Ze�d�jZdZddd	d
ddd
ddddddddd�Ze�d�ZejZdeZdd�ZdBdd�ZGdd�d�Z Gdd �d e!�Z"Gd!d"�d"�Z#Gd#d$�d$e �Z$d%d&�Z%Gd'd(�d(ej�Z&d)d*d+d,d-d.d/d/d0d1d2d3d4d5d6�Z'd7d8�Z(Gd9d:�d:�Z)e(fd;d<�Z*d=d>�Z+e�,e&j-e&e%�e�.e&j-e*�e�/e&j-d?d@g�e�0e&j-dA�dS)C�N�)�Image�	ImageFile�ImagePalette)�i8�i16be�i32be�o16be�o32bes\w\w\w\ws�PNG

)�1r)�L�L;2)r�L;4)rr)�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^�*�*$�@cCs&t��}|�|t�}|jr"td��|S)NzDecompressed Data Too Large)�zlibZ
decompressobj�
decompress�MAX_TEXT_CHUNKZunconsumed_tail�
ValueError)�sZdobjZ	plaintext�r$�4/usr/lib/python3/dist-packages/PIL/PngImagePlugin.py�_safe_zlib_decompressTs
r&cCst�||�d@S)Nl��)rZcrc32)�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��selfr+r$r$r%�__init__eszChunkStream.__init__cCszd}|jr(|j��\}}}|j�|�n*|j�d�}|dd�}|j��}t|�}t|�sptj	spt
dt|���|||fS)z.Fetch a new chunk. Returns header information.Nrrzbroken PNG file (chunk %s))r,�popr+�seek�read�tell�i32�is_cidr�LOAD_TRUNCATED_IMAGES�SyntaxError�repr)r.�cid�pos�lengthr#r$r$r%r2js
zChunkStream.readcCs|Sr*r$�r.r$r$r%�	__enter__}szChunkStream.__enter__cGs|��dSr*)�close)r.�argsr$r$r%�__exit__�szChunkStream.__exit__cCsd|_|_|_dSr*)r,�crcr+r<r$r$r%r>�szChunkStream.closecCs|j�|||f�dSr*)r,�append�r.r9r:r;r$r$r%�push�szChunkStream.pushcCs*t�d|||�t|d|�d��||�S)z"Call the appropriate chunk handlerzSTREAM %r %s %sZchunk_�ascii)�logger�debug�getattr�decoderCr$r$r%�call�szChunkStream.callcCs�tjr*t|d�d?d@r*|�||�dSz6t|t|��}t|j�d��}||kr^td|��Wn"t	j
k
r�td|��YnXdS)zRead and verify checksumr�rNrz+broken PNG file (bad header checksum in %r)z+broken PNG file (incomplete checksum in %r))rr6r�crc_skipr(r4r+r2r7�struct�error)r.r9r'Zcrc1Zcrc2r$r$r%rA�szChunkStream.crccCs|j�d�dS)z3Read checksum.  Used if the C module is not presentrN)r+r2�r.r9r'r$r$r%rL�szChunkStream.crc_skip�IENDcCsfg}z|��\}}}Wntjk
r4td��YnX||kr@qb|�|t�|j|��|�|�q|S)Nztruncated PNG file)	r2rMrN�OSErrorrAr�
_safe_readr+rB)r.ZendchunkZcidsr9r:r;r$r$r%�verify�szChunkStream.verifyN)rP)
�__name__�
__module__�__qualname__r/r2r=r@r>rDrJrArLrSr$r$r$r%r)dsr)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�textrZr[r.r$r$r%rY�s	ziTXt.__new__)NN)rTrUrV�__doc__�staticmethodrYr$r$r$r%rW�srWc@s4eZdZdZdd�Zdd�Zd
dd	�Zdd
d�ZdS)�PngInfoz<
    PNG chunk container (for use with save(pnginfo=))

    cCs
g|_dSr*)�chunksr<r$r$r%r/�szPngInfo.__init__cCs|j�||f�dS)z�Appends an arbitrary chunk. Use with caution.

        :param cid: a byte string, 4 bytes long.
        :param data: a byte string of the encoded data

        N)rarBrOr$r$r%�add�szPngInfo.add�FcCs�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�encoderbr�compress)r.�key�valuerZr[�zipr$r$r%�add_itxt�s



 �zPngInfo.add_itxtcCs�t|t�r"|j|||j|j|d�St|t�sbz|�dd�}Wn$tk
r`|j|||d�YSXt|t�sx|�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

        )rordre�zTXt��tEXtrhN)rirWrprZr[rjrk�UnicodeErrorrbrrl)r.rmrnror$r$r%�add_texts	


zPngInfo.add_textN)rcrcF)F)rTrUrVr^r/rbrprur$r$r$r%r`�s


r`cs�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"�Z�ZS)#�	PngStreamcs@t��|�i|_i|_d|_d|_d|_d|_d|_d|_	dS)N�rrr)
�superr/�im_info�im_text�im_size�im_mode�im_tile�
im_palette�im_custom_mimetype�text_memoryr-��	__class__r$r%r/"szPngStream.__init__cCs*|j|7_|jtkr&td|j��dS)Nz7Too much memory used in text chunks: %s>MAX_TEXT_MEMORY)r��MAX_TEXT_MEMORYr")r.Zchunklenr$r$r%�check_text_memory0s
��zPngStream.check_text_memorycCs�t�|j|�}|�d�}t�d|d|��t�dt||��t||�}|dkr`td|��zt||dd��}Wn:t	k
r�tj
r�d}n�Yntjk
r�d}YnX||j
d<|S)NrhziCCP profile name %rzCompression method %srz+Unknown compression method %s in iCCP chunkr�icc_profile)rrRr+�findrFrGrr7r&r"r6rrNry)r.r:r;r#�i�comp_methodr�r$r$r%�
chunk_iCCP8s&
�

zPngStream.chunk_iCCPcCs�t�|j|�}t|�t|dd��f|_z(tt|d�t|d�f\|_|_Wnt	k
rdYnXt|d�r|d|j
d<t|d�r�td��|S)	Nrr�	�r�	interlace�zunknown filter category)rrRr+r4r{�_MODESrr|�
im_rawmode�	Exceptionryr7�r.r:r;r#r$r$r%�
chunk_IHDRUs(
zPngStream.chunk_IHDRcCs&dd|j||jfg|_||_t�dS)Nrorw)r{r�r}Zim_idat�EOFError�r.r:r;r$r$r%�
chunk_IDATdszPngStream.chunk_IDATcCst�dSr*)r�r�r$r$r%�
chunk_IENDkszPngStream.chunk_IENDcCs&t�|j|�}|jdkr"d|f|_|S)Nrr)rrRr+r|r~r�r$r$r%�
chunk_PLTEps

zPngStream.chunk_PLTEcCs�t�|j|�}|jdkrLt�|�r@|�d�}|dkrJ||jd<q�||jd<nP|jdkrft|�|jd<n6|jdkr�t|�t|dd��t|dd��f|jd<|S)	Nrrhr�transparency�rrrrrr)	rrRr+r|�_simple_palette�matchr�ry�i16)r.r:r;r#r�r$r$r%�
chunk_tRNSxs




,zPngStream.chunk_tRNScCs$t�|j|�}t|�d|jd<|S)N�j�@Zgamma)rrRr+r4ryr�r$r$r%�
chunk_gAMA�szPngStream.chunk_gAMAcCsBt�|j|�}t�dt|�d|�}tdd�|D��|jd<|S)Nz>%dIrcss|]}|dVqdS)r�Nr$)�.0Zeltr$r$r%�	<genexpr>�sz'PngStream.chunk_cHRM.<locals>.<genexpr>Zchromaticity)rrRr+rMZunpack�len�tuplery)r.r:r;r#Zraw_valsr$r$r%�
chunk_cHRM�szPngStream.chunk_cHRMcCs t�|j|�}t|�|jd<|S)NZsrgb)rrRr+rryr�r$r$r%�
chunk_sRGB�szPngStream.chunk_sRGBcCs�t�|j|�}t|�t|dd��}}t|d�}|dkrht|dd�t|dd�f}||jd<n|dkr~||f|jd<|S)	Nrrr�
F%u�?��?�dpirZaspect)rrRr+r4r�intry)r.r:r;r#Zpx�pyZunitr�r$r$r%�
chunk_pHYs�s zPngStream.chunk_pHYscCs�t�|j|�}z|�dd�\}}Wntk
r>|}d}YnX|r~|�dd�}|�dd�}||j|<|j|<|�t	|��|S)Nrhr�rdre�replace)
rrRr+�splitr"rIryrzr�r�)r.r:r;r#�k�vr$r$r%�
chunk_tEXt�s
zPngStream.chunk_tEXtcCs�t�|j|�}z|�dd�\}}Wntk
r>|}d}YnX|rRt|d�}nd}|dkrjtd|��zt|dd��}Wn:tk
r�tjr�d}n�Ynt	j
k
r�d}YnX|r�|�dd�}|�dd�}||j|<|j
|<|�t|��|S)	Nrhrr�rz+Unknown compression method %s in zTXt chunkrdrer�)rrRr+r�r"rr7r&r6rrNrIryrzr�r�)r.r:r;r#r�r�r�r$r$r%�
chunk_zTXt�s6
�
zPngStream.chunk_zTXtcCs�t�|j|�}}z|�dd�\}}Wntk
r>|YSXt|�dkrP|St|d�t|d�|dd�}}}z|�dd�\}}	}
Wntk
r�|YSX|dk�r|dk�r
zt|
�}
Wn>tk
r�tjr�|YS�Ynt	j
k
�r|YSXn|Sz4|�dd�}|�dd�}|	�dd�}	|
�dd�}
Wntk
�r\|YSXt
|
||	�|j|<|j|<|�t|
��|S)Nrhrrrrdrerf)rrRr+r�r"r�rr&r6rrNrIrtrWryrzr�)r.r:r;�rr#r�Zcf�cmrZZtkr�r$r$r%�
chunk_iTXt�sB
(



zPngStream.chunk_iTXtcCs t�|j|�}d||jd<|S)N�Exif�exif)rrRr+ryr�r$r$r%�
chunk_eXIfszPngStream.chunk_eXIfcCst�|j|�}d|_|S)Nz
image/apng)rrRr+rr�r$r$r%�
chunk_acTLszPngStream.chunk_acTL)rTrUrVr/r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r��
__classcell__r$r$r�r%rv!s"	
$)rvcCs|dd�tkS)Nr)�_MAGIC)�prefixr$r$r%�_accept$sr�c@sXeZdZdZdZdd�Zedd��Zdd�Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dS)�PngImageFileZPNGzPortable network graphicsc	Cs|j�d�tkrtd��t|j�|_|j��\}}}z|j�|||�}WnHtk
r`Yq�Yn2tk
r�t	�
d|||�t�|j|�}YnX|j�
||�q$|jj|_|jj|_|jj|_d|_|jj|_|jj|_|jjr�|jj\}}t�||�|_||_dS)Nrznot a PNG file�%r %s %s (unknown))r+r2r�r7rv�pngrJr��AttributeErrorrFrGrrRrAr|�moder{Z_sizery�info�_textr}�tilerZcustom_mimetyper~r�raw�palette�_PngImageFile__prepare_idat)r.r9r:r;r#�rawmoder'r$r$r%�_open1s,	




zPngImageFile._opencCs|jdkr|��|jSr*)r��loadr<r$r$r%r]`s
zPngImageFile.textcCsZ|jdkrtd��|j�|jddd�|j��|j��|jrP|j��d|_dS)zVerify PNG fileNz)verify must be called directly after openrrr)r+�RuntimeErrorr1r�r�rSr>Z
_exclusive_fpr<r$r$r%rSis



zPngImageFile.verifycCs0|j�d�r|jd|_|j|_tj�|�dS)z"internal: prepare to read PNG filer�)rN)r��getZ
decoderconfigr��_PngImageFile__idatr�load_preparer<r$r$r%r�yszPngImageFile.load_preparecCs~|jdkrJ|j�d�|j��\}}}|dkrB|j�|||�dS||_q|dkrZ|j}nt||j�}|j||_|j�|�S)zinternal: read more image datarr)�IDATsDDATr�)r�r+r2r�rD�min)r.Z
read_bytesr9r:r;r$r$r%�	load_read�s
zPngImageFile.load_readc	Cs�|j�d�z|j��\}}}Wntjtfk
r>Yq�YnX|dkrJq�z|j�|||�Wqtk
rvYq�Yqtk
r�t	�
|j|�Yqtk
r�t�
d|||�t	�
|j|�YqXq|jj|_|j��d|_dS)z%internal: finished reading image datarrPr�N)r+r2r�rMrNr7rJ�UnicodeDecodeErrorr�rrRr�rFrGrzr�r>rCr$r$r%�load_end�s&


zPngImageFile.load_endcCs,d|jkr|��d|jkr dSt|���S�Nr�)r�r��dict�getexifr<r$r$r%�_getexif�s


zPngImageFile._getexifcCsd|jkr|��tj�|�Sr�)r�r�rr�r<r$r$r%r��s
zPngImageFile.getexifN)rTrUrV�formatZformat_descriptionr��propertyr]rSr�r�r�r�r�r$r$r$r%r�,s/
	r�)r�)�L;1r�)r
s)rs)rs)rs)rs)rs)rs)rs)rs)rs)rs)rr�r
rrrrzI;16rrrrrrcGsJd�|�}|�tt|��|�|�|�t|t|��}|�t|��dS)z'Write a PNG chunk (including CRC field)r�N)�join�write�o32r�r(�r+r9r'rAr$r$r%�putchunk�s


r�c@seZdZdd�Zdd�ZdS)�_idatcCs||_||_dSr*)r+�chunk)r.r+r�r$r$r%r/�sz_idat.__init__cCs|�|jd|�dS)Nr�)r�r+�r.r'r$r$r%r��sz_idat.writeN)rTrUrVr/r�r$r$r$r%r��sr�c	Cs�|j}|dkr�d|jkr(d|jd>}n.|jrRttt|j��d�dd�d�}nd}|dkrdd}n |dkrrd}n|dkr�d}nd	}|d	kr�d
||f}|j�dd�|j�d
d�|j�dd�|j�dd�f|_zt	|\}}Wn t
k
r�td|��YnX|�t
�||dt|jd�t|jd�|ddd�dddddg}|j�d|j�d��}	|	�r�d}
|
dt�|	�}||d|�|�d�|j�d�}|�r�d d!d"d#g}
|jD]B\}}||k�r�|�|�||||�n||
k�r�||||��q�|jdk�rDd|d}|j�d$�d|�}t|�|k�r8|d7}�q||d%|�|j�d&|j�d&d��}|�sl|dk�rP|jdk�r�d|}t|t��r�||d'|d|��n0tdtd(|��}d)|d}||d'|d|��nz|jd*k�rtdtd+|��}||d't|��nL|jd$k�r:|\}}}||d't|�t|�t|��nd&|jk�r�td,��nF|jdk�r�|j��d-k�r�|j�d-d.�}d|}||d'|d|��|j�d/�}|�r�||d0tt|dd1d2��tt|dd1d2��d3�|�r d4d5g}|jD]*\}}||k�r�|�|�||||��q�|j�d6|j�d6��}|�rxt|tj��rT|�d	�}|�d7��rl|d8d�}||d9|�t �!|t"||�d:d;|jd|fg�||d<d�t#|d=��r�|�$�dS)>Nr�bitsrr�rrrrz%s;%d�optimizeFZcompress_level���Z
compress_typeZ
dictionaryr�zcannot write mode %s as PNGsIHDRrrhscHRMsgAMAssBITssRGBstIMEr�sICC ProfilerrsiCCPZpnginfossPLTrgrsrqrsPLTEr�stRNS���r�i��z%cannot use transparency for this moder�Ar�spHYsr�r��sbKGDshISTr�r�rseXIfrorwrP�flush)%r��encoderinfor��maxr�r�Zgetdatar�Z
encoderconfig�	_OUTMODES�KeyErrorrQr�r�r��sizer�rrl�removera�imZ
getpaletterirj�o16Zgetpalettemoder�rZExif�tobytes�
startswithr�_saver��hasattrr�)r�r+�filenamer�r�Zcolorsr�r�raZicc�namer'r�Zchunks_multiple_allowedr9Zpalette_byte_numberZ
palette_bytesr�Zalpha_bytesZalphaZredZgreenZbluer�r�r$r$r%r��s�
$�
�




"
�


$r�cKsBGdd�d�}dd�}|�}z||_t||d|�W5|`X|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'rB)r.r�r$r$r%rB�sz#getchunks.<locals>.collector.appendN)rTrUrVr'r�rBr$r$r$r%�	collector�sr�cWs0d�|�}tt|t|���}|�|||f�dS)Nr�)r�r�r(rBr�r$r$r%rB�s
zgetchunks.<locals>.appendN)r�r�r')r�Zparamsr�rBr+r$r$r%�	getchunks�s	r�z.pngz.apngz	image/png)r)1Zlogging�rerMrrcrrrZ_binaryrrr�rr4r	r�r
r�Z	getLoggerrTrF�compiler�r5r�r�r�Z	SAFEBLOCKr!r�r&r(r)rXrWr`rvr�r�r�r�r�r�r�Z
register_openr�Z
register_saveZregister_extensionsZ
register_mimer$r$r$r%�<module>"s|
�

XO�"