Your IP : 216.73.216.213


Current Path : /opt/alt/python35/lib64/python3.5/site-packages/PIL/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/site-packages/PIL/__pycache__/PngImagePlugin.cpython-35.pyc



�ʴW�_�@s�ddlmZddlZddlZddlZddlZddlmZmZm	Z	m
Z
dZeje
�Ze
jZe
jZe
jZejd�jZdZdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbiZejd�ZejZdeZd d!�ZGd"d#�d#e�ZGd$d%�d%e �Z!Gd&d'�d'e�Z"Gd(d)�d)e�Z#d*d+�Z$Gd,d-�d-ej�Z%e
j&Z&e
j'Z(e
j)Z*ddcd/dddded
dfd
dgddhddiddjddkddlddmddnddoi
Z+d;d<�Z,Gd=d>�d>e�Z-e,dd?d@�Z.dAdB�Z/ej0e%j1e%e$�ej2e%j1e.�ej3e%j1dC�ej4e%j1dD�dS)p�)�print_functionN)�Image�	ImageFile�ImagePalette�_binaryz0.9s\w\w\w\ws�PNG

��1��L�L;2��L;4���I�I;16B�RGB�RGB;16B��P�P;1�P;2�P;4�LA�RGBA�LA;16B��RGBA;16Bs^�*�*$�@cCs7tj�}|j|t�}|jr3td��|S)NzDecompressed Data Too Large)�zlib�
decompressobj�
decompress�MAX_TEXT_CHUNK�unconsumed_tail�
ValueError)�sZdobjZ	plaintext�r&�E/opt/alt/python35/lib64/python3.5/site-packages/PIL/PngImagePlugin.py�_safe_zlib_decompressVs
	r(c@sseZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	ddd�Z
dS)�ChunkStreamcCs4||_g|_ttjd�s0|j|_dS)N�crc32)�fp�queue�hasattrr�core�crc_skip�crc)�selfr+r&r&r'�__init__cs		zChunkStream.__init__cCs�d}|jr:|jj�\}}}|jj|�n=|jjd�}|dd�}|jj�}t|�}t|�s�tdt	|���|||fS)z.Fetch a new chunk. Returns header information.Nrrzbroken PNG file (chunk %s))
r,�popr+�seek�read�tell�i32�is_cid�SyntaxError�repr)r1�cid�pos�lengthr%r&r&r'r5ks	zChunkStream.readcCsd|_|_|_dS)N)r,r0r+)r1r&r&r'�close}szChunkStream.closecCs|jj|||f�dS)N)r,�append)r1r;r<r=r&r&r'�push�szChunkStream.pushcCs9tjd|||�t|d|jd��||�S)z"Call the appropriate chunk handlerzSTREAM %s %s %sZchunk_�ascii)�logger�debug�getattr�decode)r1r;r<r=r&r&r'�call�szChunkStream.callcCs�tjr5t|d�d?d@r5|j||�dSyqtjj|tjj|��}t|jj	d��t|jj	d��f}||kr�t
d|��Wn%tjk
r�t
d|��YnXdS)zRead and verify checksumr�rNr	z+broken PNG file (bad header checksum in %s)z+broken PNG file (incomplete checksum in %s))
r�LOAD_TRUNCATED_IMAGES�i8r/rr.r*�i16r+r5r9�struct�error)r1r;�dataZcrc1Zcrc2r&r&r'r0�s!!0zChunkStream.crccCs|jjd�dS)z3Read checksum.  Used if the C module is not presentrN)r+r5)r1r;rMr&r&r'r/�szChunkStream.crc_skipsIENDc
Cs�g}xzy|j�\}}}Wn!tjk
rEtd��YnX||krSP|j|tj|j|��|j|�q	W|S)Nztruncated PNG file)	r5rKrL�IOErrorr0r�
_safe_readr+r?)r1ZendchunkZcidsr;r<r=r&r&r'�verify�szChunkStream.verifyN)�__name__�
__module__�__qualname__r2r5r>r@rFr0r/rPr&r&r&r'r)asr)c@s(eZdZdZedd��ZdS)�iTXtzq
    Subclass of string to allow iTXt chunks to look like strings while
    keeping their extra information

    cCs(tj||�}||_||_|S)z�
        :param value: value for this key
        :param lang: language code
        :param tkey: UTF-8 version of the key name
        )�str�__new__�lang�tkey)�cls�textrWrXr1r&r&r'rV�s		ziTXt.__new__N)rQrRrS�__doc__�staticmethodrVr&r&r&r'rT�srTc@sReZdZdZdd�Zdd�Zddddd	�Zd
dd�Zd
S)�PngInfoz<
    PNG chunk container (for use with save(pnginfo=))

    cCs
g|_dS)N)�chunks)r1r&r&r'r2�szPngInfo.__init__cCs|jj||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)r^r?)r1r;rMr&r&r'�add�szPngInfo.add�FcCs�t|t�s!|jdd�}t|t�sB|jdd�}t|t�sc|jdd�}t|t�s�|jdd�}|r�|jd|d|d|dtj|��n(|jd|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

        zlatin-1�strictzutf-8siTXtsssN)�
isinstance�bytes�encoder_r�compress)r1�key�valuerWrX�zipr&r&r'�add_itxt�s  zPngInfo.add_itxtrc
Cs�t|t�r4|j|||j|jt|��St|t�s�y|jdd�}Wn.tk
r�|j||dt|��SYnXt|t�s�|jdd�}|r�|j	d|dt
j|��n|j	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

        zlatin-1rarhszTXtsstEXtsN)rbrTrirWrX�boolrcrd�UnicodeErrorr_rre)r1rfrgrhr&r&r'�add_text�s	%
!$zPngInfo.add_textN)rQrRrSr[r2r_rirlr&r&r&r'r]�s

r]c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�ZdS)�	PngStreamcCsStj||�i|_i|_d|_d|_d|_d|_d|_dS)Nr)rr)	r)r2�im_info�im_text�im_size�im_mode�im_tile�
im_palette�text_memory)r1r+r&r&r'r2s						zPngStream.__init__cCs5|j|7_|jtkr1td|j��dS)Nz7Too much memory used in text chunks: %s>MAX_TEXT_MEMORY)rt�MAX_TEXT_MEMORYr$)r1Zchunklenr&r&r'�check_text_memory(szPngStream.check_text_memorycCs�tj|j|�}|jd�}tjd|d|��tjdt||��t||�}|dkr�td|��yt||dd��}WnAt	k
r�tj
r�d}n�Yntjk
r�d}YnX||j
d<|S)NsziCCP profile name %szCompression method %srz+Unknown compression method %s in iCCP chunkr	�icc_profile)rrOr+�findrBrCrIr9r(r$rHrrLrn)r1r<r=r%�i�comp_methodrwr&r&r'�
chunk_iCCP.s$

		
zPngStream.chunk_iCCPcCs�tj|j|�}t|�t|dd��f|_y4tt|d�t|d�f\|_|_WnYnXt|d�r�d|j	d<t|d�r�t
d��|S)	Nrr�	�r�	interlace�zunknown filter category)rrOr+r7rp�_MODESrIrq�
im_rawmodernr9)r1r<r=r%r&r&r'�
chunk_IHDRJs%4
zPngStream.chunk_IHDRcCs5dd|j||jfg|_||_t�dS)Nrhr)rr)rpr�rrZim_idat�EOFError)r1r<r=r&r&r'�
chunk_IDATYs"	zPngStream.chunk_IDATcCs
t�dS)N)r�)r1r<r=r&r&r'�
chunk_IEND`szPngStream.chunk_IENDcCs7tj|j|�}|jdkr3d|f|_|S)Nrr)rrOr+rqrs)r1r<r=r%r&r&r'�
chunk_PLTEeszPngStream.chunk_PLTEcCs�tj|j|�}|jdkrntj|�r^|jd�}|dkrk||jd<q�||jd<np|jdkr�t|�|jd<nK|jdkr�t|�t|dd��t|dd��f|jd<|S)	Nrsr�transparencyr
rr	r)	rrOr+rq�_simple_palette�matchrxrnrJ)r1r<r=r%ryr&r&r'�
chunk_tRNSms<zPngStream.chunk_tRNScCs0tj|j|�}t|�d|jd<|S)Ngj�@�gamma)rrOr+r7rn)r1r<r=r%r&r&r'�
chunk_gAMA�szPngStream.chunk_gAMAcCs�tj|j|�}t|�t|dd��}}t|d�}|dkr�t|dd�t|dd�f}||jd<n|dkr�||f|jd<|S)	Nrrrg�
F%u�?g�?�dpirZaspect)rrOr+r7rI�intrn)r1r<r=r%Zpx�pyZunitr�r&r&r'�
chunk_pHYs�s#(zPngStream.chunk_pHYscCs�tj|j|�}y|jdd�\}}Wntk
rQ|}d}YnX|r�ttk	r�|jdd�}|jdd�}||j|<|j	|<|j
t|��|S)Nsr�zlatin-1ra�replace)rrOr+�splitr$rcrUrErnrorv�len)r1r<r=r%�k�vr&r&r'�
chunk_tEXt�s
zPngStream.chunk_tEXtcCsPtj|j|�}y|jdd�\}}Wntk
rQ|}d}YnX|rkt|d�}nd}|dkr�td|��yt|dd��}WnAtk
r�tjr�d}n�Ynt	j
k
r�d}YnX|rLttk	r!|j
dd�}|j
dd�}||j|<|j|<|jt|��|S)	Nsrr�rz+Unknown compression method %s in zTXt chunkzlatin-1rar�)rrOr+r�r$rIr9r(rHrrLrcrUrErnrorvr�)r1r<r=r%r�r�rzr&r&r'�
chunk_zTXt�s6


		zPngStream.chunk_zTXtc$Cs�tj|j|�}}y|jdd�\}}Wntk
rM|SYnXt|�dkrd|St|d�t|d�|dd�}}}y|jdd�\}}	}
Wntk
r�|SYnX|dkr:|dkr6yt|
�}
Wq:tk
rtjr|S�Yq:t	j
k
r2|SYq:Xn|Sttk	r�yL|j
dd�}|j
dd�}|	j
dd�}	|
j
dd�}
Wntk
r�|SYnXt|
||	�|j|<|j|<|jt|
��|S)Nsrr	rzlatin-1razutf-8)rrOr+r�r$r�rIr(rHrrLrcrUrErkrTrnrorv)r1r<r=�rr%r�Zcf�cmrWZtkr�r&r&r'�
chunk_iTXt�sD
	2
	
	
	$zPngStream.chunk_iTXtN)rQrRrSr2rvr{r�r�r�r�r�r�r�r�r�r�r&r&r&r'rms
$rmcCs|dd�tkS)Nr)�_MAGIC)�prefixr&r&r'�_accept�sr�c@sXeZdZdZdZdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�PngImageFileZPNGzPortable network graphicscCsa|jjd�tkr$td��t|j�|_x�|jj�\}}}y|jj|||�}WnOtk
r�PYn=tk
r�t	j
d|||�tj|j|�}YnX|jj
||�q9W|jj|_|jj|_|jj|_|jj|_|jj|_|jjrT|jj\}}tj||�|_||_dS)Nrznot a PNG filez%s %s %s (unknown))r+r5r�r9rm�pngrFr��AttributeErrorrBrCrrOr0rq�moderp�sizern�infororZrr�tilersr�raw�palette�_PngImageFile__idat)r1r;r<r=r%�rawmoderMr&r&r'�_opens,

	zPngImageFile._opencCsa|jdkrtd��|jj|jddd�|jj�|jj�d|_dS)zVerify PNG fileNz)verify must be called directly after openrr	r)r+�RuntimeErrorr4r�r�rPr>)r1r&r&r'rP6s

zPngImageFile.verifycCs6|jjd�r"|jd|_tjj|�dS)z"internal: prepare to read PNG filer~rN)r)r��getZ
decoderconfigr�load_prepare)r1r&r&r'r�DszPngImageFile.load_preparecCs�xj|jdkrl|jjd�|jj�\}}}|dkr`|jj|||�dS||_qW|dkr�|j}nt||j�}|j||_|jj|�S)zinternal: read more image datarr�IDAT�DDATr�)r�r�)r�r+r5r�r@�min)r1Z
read_bytesr;r<r=r&r&r'�	load_readLs
zPngImageFile.load_readcCs|jj�d|_dS)z%internal: finished reading image dataN)r�r>)r1r&r&r'�load_endfs
zPngImageFile.load_endN)
rQrRrS�formatZformat_descriptionr�rPr�r�r�r&r&r&r'r�s.r���L;1�����������cGs�dj|�}|jtt|��|�|j|�tjj|tjj|��\}}|jt|�t|��dS)z'Write a PNG chunk (including CRC field)r�N)�join�write�o32r�rr.r*�o16)r+r;rM�hi�lor&r&r'�putchunk�s

'r�c@s(eZdZdd�Zdd�ZdS)�_idatcCs||_||_dS)N)r+�chunk)r1r+r�r&r&r'r2�s	z_idat.__init__cCs|j|jd|�dS)NsIDAT)r�r+)r1rMr&r&r'r��sz_idat.writeN)rQrRrSr2r�r&r&r&r'r��sr�cCsG|j}|dkr�d|jkr8d|jd>}nA|jrsttt|jj�d�dd�d�}nd}|dkr�d}n0|dkr�d}n|dkr�d}nd	}|d	kr�d
||f}d|jkr�|jd}nd}d
|jk|jjdd,�|jjdd-�|f|_yt	|\}	}Wn"t
k
rstd|��YnX|r~|S|jt
�||dt|jd�t|jd�|ddd�|jdkr0d|d}
|jjd�d|
�}x t|�|
kr|d7}qW||d|�|jjd|jjdd��}|sf|dkr�|jdkr�d|}
t|t�r�||d|d|
��q�tdtd|��}d|d}||d|d|
��q�|jdkr.tdtd|��}||dt|��q�|jdkry|\}}}||dt|�t|�t|��q�d|jkr�td��n]|jdkr�|jj�dkr�|jjdd�}d|}
||d|d|
��|jjd�}|rR||d tt|dd!d"��tt|dd!d"��d#�|jjd$�}|r�x'|jD]\}}||||�qtW|jjd%|jjd%��}|r�d&}|d'tj|�}||d(|�tj|t||�d)d.|jd|	fg�||d*d�t|d+�rC|j�dS)/Nr�bitsrr�r	rrrz%s;%d�
dictionaryr��optimizeZcompress_level�
compress_typezcannot write mode %s as PNGsIHDRrsrsPLTEr�stRNS�s�r
i��z%cannot use transparency for this moder�Ar�spHYsg�
F%u�?g�?sZpnginforwsICC ProfilessiCCPrhsIEND�flush���r�)rr) r��encoderinfor��maxr�r�Zgetdatar�Z
encoderconfig�	_OUTMODES�KeyErrorrNr�r�r�r��imZ
getpaletter�rbrcr�Zgetpalettemoder�r^rrer�_saver�r-r�)r�r+�filenamer��checkr�Zcolorsr�r�r�Zpalette_byte_numberZ
palette_bytesr�Zalpha_bytes�alphaZredZgreenZbluer�r�r;rMZicc�namer&r&r'r��s�		2			

	 
-$
	!r�cKs\Gdd�dt�}dd�}|�}z ||_t||d|�Wd|`X|jS)z4Return a list of PNG chunks representing this image.c@s.eZdZgZdd�Zdd�ZdS)zgetchunks.<locals>.collectorcSsdS)Nr&)r1rMr&r&r'r�)sz"getchunks.<locals>.collector.writecSs|jj|�dS)N)rMr?)r1r�r&r&r'r?,sz#getchunks.<locals>.collector.appendN)rQrRrSrMr�r?r&r&r&r'�	collector&sr�cWsfdj|�}tjj|tjj|��\}}t|�t|�}|j|||f�dS)Nr�)r�rr.r*r�r?)r+r;rMr�r�r0r&r&r'r?/s'zgetchunks.<locals>.appendN)�objectr�r�rM)r��paramsr�r?r+r&r&r'�	getchunks#s			r�z.pngz	image/png)rr)rr)r	r)r
r)rr)r
r
)rr)r
r
)rr)rr)rr	)rr)rr	)rr)rr)rr)r	r)rr)rr)rr)rr)rr)rr)rr)rr)rr)rr)rr)rr)rr)rr�)r�r�)rr�)r
r�)r
r�)rr�)rr�)rr�)rr�)rr�)rr�)rr�)rr�)5�
__future__r�logging�rerrKZPILrrrr�__version__�	getLoggerrQrBrIZi16berJZi32ber7�compiler�r8r�r�r�Z	SAFEBLOCKr"rur(r�r)rUrTr]rmr�r�Zo8Zo16ber�Zo32ber�r�r�r�r�r�Z
register_openr�Z
register_saveZregister_extensionZ
register_mimer&r&r&r'�<module>"sz"				
VM�m			�