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__/TiffImagePlugin.cpython-35.pyc



�ʴW?���@s�ddlmZmZddlmZmZddlmZddlmZddlmZddl	Z	ddl
mZddlm
Z
mZddlZddlZddlZddlZddlZddlZd	d
lmZdZdZdZdZd
ZdZdZejZejZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.d Z/d!Z0d"Z1d#Z2d$Z3d%Z4d&Z5d'Z6d(Z7d)Z8d*Z9d+Z:d,Z;d-Z<d.Z=d/Z>d	d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJiZ?e@dKdL�e?jA�D��ZBedd	fd	d	fffdMdNfedd	fd	d	fffdMdNfedd	fd1d	fffdMdOfedd	fd1d	fffdMdOfed	d	fd	d	fffdMdMfed	d	fd	d	fffdMdMfed	d	fd1d	fffdMdPfed	d	fd1d	fffdMdPfedd	fd	d1fffdQdRfedd	fd	d1fffdQdRfedd	fd1d1fffdQdSfedd	fd1d1fffdQdSfed	d	fd	d1fffdQdTfed	d	fd	d1fffdQdTfed	d	fd1d1fffdQdUfed	d	fd1d1fffdQdUfedd	fd	d5fffdQdVfedd	fd	d5fffdQdVfedd	fd1d5fffdQdWfedd	fd1d5fffdQdWfed	d	fd	d5fffdQdXfed	d	fd	d5fffdQdXfed	d	fd1d5fffdQdYfed	d	fd1d5fffdQdYfedd	fd	d=fffdQdZfedd	fd	d=fffdQdZfedd	fd1d=fffdQd[fedd	fd1d=fffdQd[fed	d	fd	d=fffdQdQfed	d	fd	d=fffdQdQfed	d	fd1d=fffdQd\fed	d	fd1d=fffdQd\fed	d	fd	d]fffd^d_fed	d	fd	d`fffd^d^fed	d	fd	d`fffdadafed	d1fd	d`fffdbdbfed	d1fd	d`fffdcdcfedd3fd	ddfffdedffedd3fd	ddfffdedgfed	d	fd	ddfffdhdifed	d1fd	ddfffdhdjfed	d1fd	ddfffdkdkfed	d3fd	ddfffdedffed	d3fd	ddfffdedgfed	d	fd	d=d=fd1ffdldlfed	d	fd	d=d=fd1ffdldlfed1d	fd	d=d=d=fffdmdmfed1d	fd	d=d=d=fffdmdmfed1d	fd1d=d=d=fffdmdnfed1d	fd1d=d=d=fffdmdnfed1d	fd	d=d=d=d=fffdodofed1d	fd	d=d=d=d=fffdodofed1d	fd	d=d=d=d=fdffdpdpfed1d	fd	d=d=d=d=fdffdpdpfed1d	fd	d=d=d=d=fd	ffdodqfed1d	fd	d=d=d=d=fd	ffdodqfed1d	fd	d=d=d=d=fd1ffdodofed1d	fd	d=d=d=d=fd1ffdodofed1d	fd	d=d=d=d=fdrffdodofed1d	fd	d=d=d=d=fdrffdodofed3d	fd	d	fffdsdtfed3d	fd	d	fffdsdtfed3d	fd1d	fffdsdufed3d	fd1d	fffdsdufed3d	fd	d1fffdsdvfed3d	fd	d1fffdsdvfed3d	fd1d1fffdsdwfed3d	fd1d1fffdsdwfed3d	fd	d5fffdsdxfed3d	fd	d5fffdsdxfed3d	fd1d5fffdsdyfed3d	fd1d5fffdsdyfed3d	fd	d=fffdsdsfed3d	fd	d=fffdsdsfed3d	fd	d=d=fd1ffdzdzfed3d	fd	d=d=fd1ffdzdzfed3d	fd1d=fffdsd{fed3d	fd1d=fffdsd{fed7d	fd	d=d=d=d=fffd|d|fed7d	fd	d=d=d=d=fffd|d|fed9d	fd	d=d=d=fffd}d}fed9d	fd	d=d=d=fffd}d}fed=d	fd	d=d=d=fffd~d~fed=d	fd	d=d=d=fffd~d~fiTZCdd�d�gZDd�d��ZEd�d��ZFiZGiZHGd�d��d�e�ZIGd�d��d�e	jJ�ZKeGeK_GeHeK_Hx`ejA�D]R\ZLZMeMjNd�d��ZMeOeKd�eMeGeLd	�eOeKd�eMeHeL�q~W[G[H[L[MGd�d��d�eK�ZPePZQGd�d��d�ej�ZRdMdMed	d	d	fdfdQdQed	d	d=fdfdldled	d	d=d=fd1fdsdsed3d	d=fdfdzdzed3d	d=d=fd1fdhdjed	d1ddfdfd^d^ed	d	d`fdfdbdbed	d1d`fdfdedfed	d3ddfdfdmdmed1d	d=d=d=fdfdpdped1d	d=d=d=d=fdfdodoed1d	d=d=d=d=fd1fd|d|ed7d	d=d=d=d=fdfd}d}ed9d	d=d=d=fdfd~d~ed=d	d=d=d=fdfdkdked	d1ddfdfdadaed	d	d`fdfdcdced	d1d`fdfdgdged	d3ddfdfiZSd�d��ZTejUeRjVeReE�ejWeRjVeT�ejXeRjVd��ejXeRjVd��ejYeRjVd��dS)��)�division�print_function)�Image�	ImageFile)�ImagePalette)�_binary)�TiffTagsN)�Fraction)�Number�Rational�)�TYPESz1.3.5FTsIIsMM�iiiii
iiiiiiiii(i1i2i;i=i@iDiRiSi[i��i��iI�is�ii�i�i��i���raw��
tiff_ccitt��group3��group4��tiff_lzw��	tiff_jpeg��jpeg��tiff_adobe_deflatei��tiff_raw_16i��packbitsi)��tiff_thunderscani���tiff_deflateit��tiff_sgilogiu��
tiff_sgilog24cCs"g|]\}}||f�qS�r$)�.0�k�vr$r$�F/opt/alt/python35/lib64/python3.5/site-packages/PIL/TiffImagePlugin.py�
<listcomp>�s	r)�1z1;Iz1;IRz1;R�LzL;2IzL;2IRzL;2zL;2RzL;4IzL;4IRzL;4zL;4RzL;IzL;IRzL;R�zI;16zI;12�zI;16BzI;16SzI;16BS� �FzF;32FzF;32BF�IzI;32NzI;32SzI;32BSZLA�RGBzRGB;RZRGBAZRGBXZRGBai��PzP;1zP;1RzP;2zP;2RzP;4zP;4RZPAzP;RZCMYKZYCbCrZLABsMM*sII*sII�cCs|dd�tkS)Nr)�PREFIXES)�prefixr$r$r(�_accept�sr5cCsRt|�dk}t|r%d|n|�j|�}|rN|ddd�S|S)Nr���)�abs�IFDRational�limit_rational)�valZmax_val�invZn_dr$r$r(�_limit_rational�s%r<c@s�eZdZdZd3Zddd�Zedd	��Zed
d��Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
e
d�Ze
d�Ze
d�Ze
d�Ze
d�Ze
d�Ze
d�Ze
d�Ze
d�Ze
d�Ze
d �Ze
d!�Ze
d"�Ze
d#�Ze
d$�Ze
d%�Ze
d&�Ze
d'�Ze
d(�Z e
d)�Z!e
d*�Z"e
d+�Z#e
d,�Z$e
d-�Z%e
d.�Z&e
d/�Z'e
d0�Z(e
d1�Z)d2S)4r8z� Implements a rational class where 0/0 is a legal value to match
    the in the wild use of exif rationals.

    e.g., DigitalZoomRatio - 0.00/0.00  indicates that no digital zoom was used
    �
_numerator�_denominator�_valrcCs||_||_td�|_t|�tkrT|j|_|j|_||_t|�tkr�|j|_|j|_|j|_dS|dkr�td�|_dS|dkrt	j
dkr�t|�tkr�tj|�|_qt|�|_nt||�|_dS)z�
        :param value: either an integer numerator, a
        float/rational/other number, or an IFDRational
        :param denominator: Optional integer denominator
        rNr�nani)r>r=�floatr?�typer	�	numerator�denominatorr8�sys�
hexversionZ
from_float)�self�valuerDr$r$r(�__init__s(			!zIFDRational.__init__cCs|jS)N)r=)�ar$r$r(rC1szIFDRational.numeratorcCs|jS)N)r>)rJr$r$r(rD5szIFDRational.denominatorcCsA|jdkr|j|jfS|jj|�}|j|jfS)z�

        :param max_denominator: Integer, the maximum denominator value
        :returns: Tuple of (numerator, denominator)
        r)rDrCr?Zlimit_denominator)rGZmax_denominator�fr$r$r(r99szIFDRational.limit_rationalcCstt|j��S)N)�strrAr?)rGr$r$r(�__repr__FszIFDRational.__repr__cCs
|jj�S)N)r?�__hash__)rGr$r$r(rNIszIFDRational.__hash__cCs
|j|kS)N)r?)rG�otherr$r$r(�__eq__LszIFDRational.__eq__cs�fdd�}|S)Ncst|j��|�S)N)�getattrr?)rG�args)�opr$r(�delegatePsz'IFDRational._delegate.<locals>.delegater$)rSrTr$)rSr(�	_delegateOszIFDRational._delegate�__add__�__radd__�__sub__�__rsub__�__div__�__rdiv__�__mul__�__rmul__�__truediv__�__rtruediv__�__floordiv__�
__rfloordiv__�__mod__�__rmod__�__pow__�__rpow__�__pos__�__neg__�__abs__�	__trunc__�__lt__�__gt__�__le__�__ge__�__nonzero__�__ceil__�	__floor__�	__round__N)r=r>r?)*�__name__�
__module__�__qualname__�__doc__�	__slots__rI�propertyrCrDr9rMrNrPrUrVrWrXrYrZr[r\r]r^r_r`rarbrcrdrerfrgrhrirjrkrlrmrnrorprqr$r$r$r(r8sL"

r8c@s�eZdZdZdddd�Zedd��Zedd��Zed	d��Zej	d
d��Zdd
�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zeekr�dd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zeeedcdddedfdgdhdig��edCdC�dDdEdF��ZedC�dGdH��Z edIdC�dDdJdK��Z!edI�dLdM��Z"edNd7�dDdOdP��Z#edN�dQdR��Z$edSdC�dDdTdU��Z%edS�dVdW��Z&edXd7�dDdYdZ��Z'edX�d[d\��Z(d]d^�Z)d_d`�Z*dadb�Z+dS)j�ImageFileDirectory_v2a|This class represents a TIFF tag directory.  To speed things up, we
    don't decode tags unless they're asked for.

    Exposes a dictionary interface of the tags in the directory::

        ifd = ImageFileDirectory_v2()
        ifd[key] = 'Some Data'
        ifd.tagtype[key] = 2
        print(ifd[key])
        'Some Data'

    Individual values are returned as the strings or numbers, sequences are
    returned as tuples of the values.

    The tiff metadata type of each item is stored in a dictionary of
    tag types in
    `~PIL.TiffImagePlugin.ImageFileDirectory_v2.tagtype`. The types
    are read from a tiff file, guessed from the type added, or added
    manually.

    Data Structures:

        * self.tagtype = {}

          * Key: numerical tiff tag number
          * Value: integer corresponding to the data type from `~PIL.TiffTags.TYPES`

    .. versionadded:: 3.0.0
    sII*NcCs�|dd�tkr&td|��|dk	r8|n
|dd�|_|jtkrfd|_n'|jtkr�d|_ntd��|j�|jd|dd��\|_d	|_	dS)
a�Initialize an ImageFileDirectory.

        To construct an ImageFileDirectory from a real file, pass the 8-byte
        magic header to the constructor.  To only set the endianness, pass it
        as the 'prefix' keyword argument.

        :param ifh: One of the accepted magic headers (cf. PREFIXES); also sets
              endianness.
        :param prefix: Override the endianness of the file.
        Nrz%not a TIFF file (header %r not valid)r�>�<znot a TIFF IFDr+F)
r3�SyntaxError�_prefix�MM�_endian�II�reset�_unpack�next�_legacy_api)rG�ifhr4r$r$r(rI�s%
"zImageFileDirectory_v2.__init__cCs|jS)N)r|)rGr$r$r(�<lambda>�szImageFileDirectory_v2.<lambda>cCs|jS)N)�_offset)rGr$r$r(r��scCs|jS)N)r�)rGr$r$r(r��scCstd��dS)Nz"Not allowing setting of legacy api)�	Exception)rGrHr$r$r(�
legacy_api�sz ImageFileDirectory_v2.legacy_apicCs:i|_i|_i|_i|_d|_d|_dS)N)�_tags_v1�_tags_v2�_tagdata�tagtypeZ_nextr�)rGr$r$r(r��s					zImageFileDirectory_v2.resetcCstt|��S)N)rL�dict)rGr$r$r(�__str__�szImageFileDirectory_v2.__str__cCstjddt�t|�S)zPReturn a dictionary of the image's tags.

        .. deprecated:: 3.0.0
        zas_dict() is deprecated. zPlease use dict(ifd) instead.)�warnings�warn�DeprecationWarningr�)rGr$r$r(�as_dict�s	zImageFileDirectory_v2.as_dictcCstdd�|j�D��S)z�
        :returns: dict of name|key: value

        Returns the complete tag dictionary, with named tags where possible.
        css-|]#\}}tj|�j|fVqdS)N)r�lookup�name)r%�coderHr$r$r(�	<genexpr>�sz.ImageFileDirectory_v2.named.<locals>.<genexpr>)r��items)rGr$r$r(�named�szImageFileDirectory_v2.namedcCs tt|j�t|j�B�S)N)�len�setr�r�)rGr$r$r(�__len__�szImageFileDirectory_v2.__len__cCs�||jkrU|j|}|j|}|j|\}}||||j�||<|j|}|jr�t|ttf�r�|f}|S)N)r�r�r��_load_dispatchr��
isinstance�tuple�bytes)rG�tag�data�typ�size�handlerr:r$r$r(�__getitem__�s


	z!ImageFileDirectory_v2.__getitem__cCs||jkp||jkS)N)r�r�)rGr�r$r$r(�__contains__�sz"ImageFileDirectory_v2.__contains__cCs
||kS)Nr$)rGr�r$r$r(�has_key�szImageFileDirectory_v2.has_keycCs|j|||j�dS)N)�_setitemr�)rGr�rHr$r$r(�__setitem__sz!ImageFileDirectory_v2.__setitem__csBtttf}ttkr(|tf7}tj|��t||�rO|gn|}||jkrs�jr��j|j|<n�d|j|<t	dd�|D��r�d|j|<n�t	dd�|D��rt	dd�|D��r�d|j|<qsd|j|<nkt	d	d�|D��r1d
|j|<nBttkrMd|j|<n&t	dd�|D��rsd|j|<|j|dkr�ttk	r�t|t�r�|j
d
d�n|g}t�fdd�|D��}|r�|jn|j
}�jdkr4|r$|j|dkr$|f}|\||<n
|||<dS)Nrcss|]}t|t�VqdS)N)r�r8)r%r'r$r$r(r�sz1ImageFileDirectory_v2._setitem.<locals>.<genexpr>rcss|]}t|t�VqdS)N)r��int)r%r'r$r$r(r�scss|]}|dkVqdS)rr-Nir$)r%r'r$r$r(r�srrcss|]}t|t�VqdS)N)r�rA)r%r'r$r$r(r�sr,rcss|]}t|t�VqdS)N)r�rL)r%r'r$r$r(r�s�ascii�replacec3s|]}�j|�VqdS)N)Zcvt_enum)r%rH)�infor$r(r�%sr�
)rr�)r
r�rL�unicoderr�r�r�rB�all�encoder�r�r��length)rGr�rHr�Z	basetypes�values�destr$)r�r(r�s<
	

*	zImageFileDirectory_v2._setitemcCs=|jj|d�|jj|d�|jj|d�dS)N)r��popr�r�)rGr�r$r$r(�__delitem__0sz!ImageFileDirectory_v2.__delitem__cCs tt|j�t|j�B�S)N)�iterr�r�r�)rGr$r$r(�__iter__5szImageFileDirectory_v2.__iter__cCstj|j||�S)N)�struct�unpackr~)rG�fmtr�r$r$r(r�8szImageFileDirectory_v2._unpackcGstj|j||�S)N)r��packr~)rGr�r�r$r$r(�_pack;szImageFileDirectory_v2._packcs��fdd�}|S)NcsYddlm}|jjd�rE|jdd�jdd�|�<�|ft�<|S)Nr)r
�load_r�_� )�PIL.TiffTagsr
rr�
startswithr�r�)�funcr
)�idxr�r$r(�	decorator?s
#z9ImageFileDirectory_v2._register_loader.<locals>.decoratorr$)r�r�r�r$)r�r�r(�_register_loader>sz&ImageFileDirectory_v2._register_loadercs�fdd�}|S)Ncs|t�<|S)N)�_write_dispatch)r�)r�r$r(r�Hs
z9ImageFileDirectory_v2._register_writer.<locals>.decoratorr$)r�r�r$)r�r(�_register_writerGsz&ImageFileDirectory_v2._register_writercsxddlm}|\}�}|||<tjd����d��fdd�ft|<�fdd�t|<dS)Nr)r
�=Tcs&|jdjt|����|�S)Nz{0}{1})r��formatr�)rGr�r�)r�r�r$r(r�Rsz7ImageFileDirectory_v2._register_basic.<locals>.<lambda>cs#dj��fdd�|D��S)N�c3s!|]}�j�|�VqdS)N)r�)r%rH)r�rGr$r(r�UszJImageFileDirectory_v2._register_basic.<locals>.<lambda>.<locals>.<genexpr>)�join)rGr�)r�)rGr(r�Ts)r�r
r��calcsizer�r�)Zidx_fmt_namer
r�r�r$)r�r�r(�_register_basicMs
"z%ImageFileDirectory_v2._register_basicr�H�shortrr+�longr�b�signed byter�h�signed short�	�l�signed long�rKrAr,�d�doublerTcCs|S)Nr$)rGr�r�r$r$r(�	load_byte\szImageFileDirectory_v2.load_bytecCs|S)Nr$)rGr�r$r$r(�
write_byte`sz ImageFileDirectory_v2.write_bytercCs/|jd�r|dd�}|jdd�S)Nsrzlatin-1r�r6)�endswith�decode)rGr�r�r$r$r(�load_stringdsz!ImageFileDirectory_v2.load_stringcCs=tjddkr%|jdd�}d|jdd�dS)Nrrr�r�r�s)rE�version_infor�r�)rGrHr$r$r(�write_stringjsz"ImageFileDirectory_v2.write_stringrcsw|jdjt|�d�|�}�fdd��t�fdd�t|ddd�|ddd��D��S)	Nz{0}Lrcs�r||fSt||�S)N)r8)rJr�)r�r$r(r�tsz5ImageFileDirectory_v2.load_rational.<locals>.<lambda>c3s$|]\}}�||�VqdS)Nr$)r%�num�denom)�combiner$r(r�usz6ImageFileDirectory_v2.load_rational.<locals>.<genexpr>rr)r�r�r�r��zip)rGr�r��valsr$)r�r�r(�
load_rationalqs%z#ImageFileDirectory_v2.load_rationalcs dj�fdd�|D��S)Nr�c3s*|] }�jdt|d��VqdS)�2Lr�Nl)r�r<)r%�frac)rGr$r(r�zsz7ImageFileDirectory_v2.write_rational.<locals>.<genexpr>)r�)rGr�r$)rGr(�write_rationalxsz$ImageFileDirectory_v2.write_rationalrcCs|S)Nr$)rGr�r�r$r$r(�load_undefined}sz$ImageFileDirectory_v2.load_undefinedcCs|S)Nr$)rGrHr$r$r(�write_undefined�sz%ImageFileDirectory_v2.write_undefinedr�csw|jdjt|�d�|�}�fdd��t�fdd�t|ddd�|ddd��D��S)	Nz{0}lrcs�r||fSt||�S)N)r8)rJr�)r�r$r(r��sz<ImageFileDirectory_v2.load_signed_rational.<locals>.<lambda>c3s$|]\}}�||�VqdS)Nr$)r%r�r�)r�r$r(r��sz=ImageFileDirectory_v2.load_signed_rational.<locals>.<genexpr>rr)r�r�r�r�r�)rGr�r�r�r$)r�r�r(�load_signed_rational�s%z*ImageFileDirectory_v2.load_signed_rationalcs dj�fdd�|D��S)Nr�c3s*|] }�jdt|d��VqdS)r�r�Ni@)r�r<)r%r�)rGr$r(r��sz>ImageFileDirectory_v2.write_signed_rational.<locals>.<genexpr>)r�)rGr�r$)rGr(�write_signed_rational�sz+ImageFileDirectory_v2.write_signed_rationalcCsE|j|�}t|�|krAtdd|t|�f��|S)NzCorrupt EXIF data.  z,Expecting to read %d bytes but only got %d. )�readr��IOError)rG�fpr��retr$r$r(�_ensure_read�sz"ImageFileDirectory_v2._ensure_readcCs�|j�|j�|_y*x�t|jd|j|d��d�D]�}|jd|j|d��\}}}}tr�tj|�j	}t
j|d�}td||||fdd	�y|j
|\}	}
Wn(tk
rtr�td
|�wEYnX||	}|dkr�|j�}|jd|�\}
trXtd
||
fdd	�|j|
�tj||�}|j|�n|d|�}t|�|kr�tjd|t|�|f�qE||j|<||j|<trE|dkr	td|�qEtd||�qEW|jd|j|d��\|_Wn<tk
r�}ztjt|��dSWYdd}~XnXdS)Nr�rr�HHL4sr,�unknownztag: %s (%d) - type: %s (%d)�endr�z- unsupported typerr+z$Tag Location: %s - Data Location: %szXPossibly corrupt EXIF data.  Expecting to read %d bytes but only got %d. Skipping tag %sr.z- value: <table: %d bytes>z- value:)r��tellr��ranger�r��DEBUGrr�r�r
�get�printr��KeyError�seekrZ
_safe_readr�r�r�r�r�r�r�rL)rGr��ir�r��countr��tagname�typnameZ	unit_sizer�r��here�offset�msgr$r$r(�load�sR
/*



	

(zImageFileDirectory_v2.loadc
Cs�|j�dkr5|j|j|jddd��|j|jdt|j���g}|j�t|j�dd}d}x�t|jj��D]�\}}|tkr�t|�}|j	j
|�}tr�td|||f�t
|t�r|n|f}|j|||�}	tr�tj|�j}
tj
|d	�}td
|
|||fdd�t|	�d
kr�tdt|	��n
td|�|dkr�t|	�n	t|�}t|	�dkr|j||||	jdd�df�q�|j||||jd|�|	f�|t|	�ddd7}q�W|dk	r�||\}}}}}	|	r�td��|jd|jd|�d|�}|||||	f||<xm|D]e\}}}}}	tdkr
t|||t|�t|	��|j|jd||||��q�W|jd�xG|D]?\}}}}}	|j|	�t|	�d@rD|jd�qDW|S)NrZHL�*rr�r,rzTag %s, Type: %s, Value: %sr�zsave: %s (%d) - type: %s (%d)r�r�r-z- value: <table: %d bytes>z- value:rrsr�r+rz&multistrip support not yet implementedr�s)rr)r��writer|r�r�r��sortedr��STRIPOFFSETSr�r�r�r�r�r�r�rr�r�r
�append�ljust�NotImplementedErrorr��repr)
rGr��entriesrZstripoffsetsr�rHr�r�r�rrrr$r$r(�save�sX#"!"
$+( 	&"&

zImageFileDirectory_v2.save)rr�r�)rr+r�)rr�r�)rr�r�)r�r�r�)r�rKrA)r,r�r�),rrrsrtrurIrwr4rr��setterr�r�r�r�r�r�r�r�rLr�r�r�r�r�r�r�r�r�r��list�mapr�r�r�r�r�r�r�r�r�r�r�rrr$r$r$r(rxzs\		,	
	5rxr�r�r�Zwrite_c@s�eZdZdZdd�Zedd��Zedd��Zedd��Z	d	d
�Z
dd�Zd
d�Zdd�Z
dd�Zdd�ZdS)�ImageFileDirectory_v1a�This class represents the **legacy** interface to a TIFF tag directory.

    Exposes a dictionary interface of the tags in the directory::

        ifd = ImageFileDirectory_v1()
        ifd[key] = 'Some Data'
        ifd.tagtype[key] = 2
        print ifd[key]
        ('Some Data',)

    Also contains a dictionary of tag types as read from the tiff image file,
    `~PIL.TiffImagePlugin.ImageFileDirectory_v1.tagtype`.

    Values are returned as a tuple.

    ..  deprecated:: 3.0.0
    cOs tj|||�d|_dS)NT)rxrIr�)rGrR�kwargsr$r$r(rI.szImageFileDirectory_v1.__init__cCs|jS)N)r�)rGr$r$r(r�2szImageFileDirectory_v1.<lambda>cCs|jS)N)r�)rGr$r$r(r�3scCs:|d|j�}|j|_|j|_|j|_|S)a3 Returns an
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`
        instance with the same data as is contained in the original
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2`
        instance.

        :returns: :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`

        r4)r4r�r�r�)�cls�original�ifdr$r$r(�from_v25s
zImageFileDirectory_v1.from_v2cCsLtd|j�}t|j�|_t|j�|_t|j�|_|S)a3 Returns an
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2`
        instance with the same data as is contained in the original
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`
        instance.

        :returns: :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2`

        r4)rxr4r�r�r�r�)rGrr$r$r(�to_v2Gs
zImageFileDirectory_v1.to_v2cCs||jkp||jkS)N)r�r�)rGr�r$r$r(r�Xsz"ImageFileDirectory_v1.__contains__cCs tt|j�t|j�B�S)N)r�r�r�r�)rGr$r$r(r�[szImageFileDirectory_v1.__len__cCs tt|j�t|j�B�S)N)r�r�r�r�)rGr$r$r(r�^szImageFileDirectory_v1.__iter__cCs(x!dD]}|j|||�qWdS)NFT)FT)r�)rGr�rHr�r$r$r(r�as
z!ImageFileDirectory_v1.__setitem__cCs�||jkrl|j|}|j|}|j|\}}x-dD]%}|j|||||�|�qCW|j|}t|ttf�s�|f}|S)NFT)FT)r�r�r�r�r�r�r�r�)rGr�r�r�r�r�Zlegacyr:r$r$r(r�es


#
	z!ImageFileDirectory_v1.__getitem__N)rrrsrtrurIrwZtagsZtagdata�classmethodrrr�r�r�r�r�r$r$r$r(rsrcs�eZdZdZdZdd�Zedd��Zedd��Zd	d
�Z	dd�Z
d
d�Zddd�Z�fdd�Z
dd�Zdd�Z�S)�
TiffImageFileZTIFFz
Adobe TIFFcCs�|jjd�}t|�|_d|_|_|jj|_|_d|_	|j|_
g|_d|_d|_
tr�td�td|j�td|�|jd�dS)	z#Open the first image in a TIFF filerNrz*** TiffImageFile._open ***z
- __first:z- ifh: rr6)r�r�rx�tag_v2r�rr�Z_TiffImageFile__first�_TiffImageFile__next�_TiffImageFile__frame�_TiffImageFile__fp�
_frame_pos�	_n_frames�_is_animatedr�r��_seek)rGr�r$r$r(�_open~s				

zTiffImageFile._opencCsy|jdkrr|j�}y"x|j|j�d�q!WWn%tk
rd|j�d|_YnX|j|�|jS)Nr)r$r�r&�EOFErrorr)rG�currentr$r$r(�n_frames�s

zTiffImageFile.n_framescCsg|jdkr`|j�}y|jd�d|_Wntk
rRd|_YnX|j|�|jS)NrTF)r%r�rr()rGr)r$r$r(�is_animated�s



zTiffImageFile.is_animatedcCsH|jt|d��tj|j�tjj|j|j�|_dS)z%Select a given frame as current imagerN)	r&�maxrZ_decompression_bomb_checkr��core�new�mode�im)rG�framer$r$r(r�szTiffImageFile.seekcCsJ|j|_x�t|j�|kr�|js9td��trhtd||j|j|jj	�f�|jj	�|jj
|j�|jj|j�tr�td|jj	��|jj
|j�|jj|_|jd7_qW|jj
|j|�|jj
|j�tj|j�|_|_||_|j�dS)Nzno more images in TIFF filez9Seeking to frame %s, on frame %s, __next %s, location: %szLoading tags, location: %sr)r"r�r�r#r r(r�r�r!r�rr
rrr�rrr�r�_setup)rGr1r$r$r(r&�s(	#
	zTiffImageFile._seekcCs|jS)zReturn the current frame number)r!)rGr$r$r(r��szTiffImageFile.tellNcCs�d}|dkr+|jdkr+||}|j}|dkrR|ddf}n�|dkr�|df}t|jkr�|jt\|_nI|d	kr�|}n4|d
kr�|}t|jkr�|jtf|_t|jkr�|jt|jd<|S)zSetup decoder contextsNr1rrrrr�rr�icc_profile)	�_planar_configuration�_compression�
JPEGTABLESrZtile_prefix�	PREDICTOR�
decoderconfig�
ICCPROFILEr�)rG�rawmodeZlayer�tilerR�compressionr$r$r(�_decoder�s&
		zTiffImageFile._decodercs&|jr|j�Stt|�j�S)N)�use_load_libtiff�
_load_libtiff�superrr)rG)�	__class__r$r(r�s	
zTiffImageFile.loadcCstjj|�}|jdkr-td��|js:|S|j�t|j�dksetd��|jdd}|jdd|jjf}tj|j	d||j
�}y|j|j|�Wnt
k
r�td��YnXt|jd	�r-trtd
�|j|jj��\}}nxt|jd�rwtrOtd�|jjd�|jd
�\}}n.tr�td�|j|jj��\}}g|_d|_t|jd�r�|js�|jj�d|_|dkrt|��|j�tjj|�S)z] Overload method triggered when we detect a compressed tiff
            Calls out to libtiff Nzcannot load this imagerzNot exactly one tilerr�libtiffzCouldn't set the image�getvaluez5have getvalue. just sending in a string from getvalue�filenoz3have fileno, calling fileno version of the decoder.sfpfpz+don't have fileno or getvalue. just reading�close)rrr<r�Zload_preparer�rrZ_getdecoderr/r9�setimager0�
ValueError�hasattrr�r�r�r�rDrr��readonlyr rFZload_end)rGZpixelZextentsrR�decoder�n�errr$r$r(r@�sL	



!

			
	
zTiffImageFile._load_libtiffcCs�d|jkrtd��t|jjtd�|_|jjtd�|_|jjtd�}|jjt	d�}t
r�td�td|j�td|�td|j�td	|�|jjt�}|jjt
�}||f|_t
rtd
|j�|jjtd2�}t|�dkrat|�t|�koVdknrad3}|jj||||jjtd4�|jjtf�f}t
r�td|�yt|\|_}Wn.tk
r�t
r�td�td
��YnXt
rtd|�td|j�|j|jd<|jjtd�}|jjtd�}	|r�|	r�|jjtd�}
|
dkr�||	f|jd<n=|
dkr�|d|	df|jd<n||	f|jd<d}}}
g|_d|_t |jkrU|jt }|jjt!|�}|jd}t"sH|jd5kr�d!|_yMt#|j$d"�o{t%j&|j$j'��}t#|j$d#�r�|j$j(�Wntk
r�d}YnX|dkr'|jj||d|jjtd6�|jjtf�f}t
rtd|�t|\|_}|jd7krHd%|krHd&}||j|f}|jj)|jdd||fd|f�d'}qkx�t*t|��D]�}|j+||
|�}|jj)|jdt||�|t|||�f|||f�t
rtd(|j�||}||jdkrHd}}|
d7}
d'}q�Wnt,|jkrO|jjd)�}|jjd*�}d'}x�|jt,D]�}|s�|j+||
�}|jj)|j||||||f||f�||}||jdkr�d||}}||jdkr�d}}|
d7}
d'}q�Wnt
r_td+�td,��|jd-kr�d.d/�|jt-D�}t.j/d0d1j0|��|_1d'S)8z-Setup this image object based on current tagsi�z+Windows Media Photo files not yet supportedrrz*** Summary ***z- compression:z- photometric_interpretation:z- planar_configuration:z
- fill_order:z- size:zformat key:z- unsupported formatzunknown pixel modez- raw mode:z- pil mode:r=r�dpirgR���Q@�
resolutionFrrrrrr r!r"r#rTrE�flush�I;16B�I;16zI;16NNztiles: iBiCz- unsupported data organizationzunknown data organizationr2cSs g|]}t|d��qS)r)�o8)r%r�r$r$r(r)s	z(TiffImageFile._setup.<locals>.<listcomp>zRGB;Lr�)r)r)r)
rrrrrr r!r"r#r)r)rQrR)2rr��COMPRESSION_INFOr��COMPRESSIONr6�PLANAR_CONFIGURATIONr5�PHOTOMETRIC_INTERPRETATION�	FILLORDERr�r��
IMAGEWIDTH�IMAGELENGTHr��SAMPLEFORMATr�r,�minr4�
BITSPERSAMPLE�EXTRASAMPLES�	OPEN_INFOr/r�r{r��X_RESOLUTION�Y_RESOLUTION�RESOLUTION_UNITr<r?r�ROWSPERSTRIP�READ_LIBTIFFrIr��os�duprErPr
r�r>�TILEOFFSETS�COLORMAPrrr��palette)rG�photoZ	fillorderZxsizeZysizeZsampleFormat�keyr;ZxresZyresZresunit�x�yr�Zoffsetsr��wr�rJr�orir$r$r(r2As�


(



		

		

	
		%



	





zTiffImageFile._setup)rrrsrtr�Zformat_descriptionr'rwr*r+rr&r�r>rr@r2r$r$)rBr(rys	ErcCsy#t|j\}}}}}}Wn%tk
rJtd|j��YnXtd|�}	|jjd|jjdd��}
tp�|
dk}t	|dd�|	t
<|jd|	t<|jd|	t
<|jjdi�}tr�td	t|��t|t�r|j�}xD|D]<}
|j|
�|	|
<y|j|
|	j|
<WqYqXqWt|d
�r�x_ttttttfD]E}
|
|jkr�|j|
|	|
<|jjj|
d�|	j|
<q�Wd|jkr�|jd|	t<x�tdftd
ftd
ftdftdftdftdft dft!dft"dfg
D]�\}
}|j#dd�}d|kr�||jkr�t$j%d||ft&�|j|j#dd�|	|
<||jkrK|j||	|
<qKW|jjd�}|rd|	t<|d|	t<|d|	t<|d1krU||	t'<t(|�dkrUt(|�|	t)<|dk	rk||	t*<|dkr�||	t+<||	t,<|jdkr�|j-j.dd�}t/dd�|D��|	t0<t(|�|jd|ddd }|jd|	t1<||jd|	t2<d|	t3<t4j|
d�|	t5<|r�tritd!�td"t6|	j7���d}t|d#�r�y&|j8d�t9j:|j;��}Wnt<j=k
r�YnXt3t2g}i}|d|t'<i}t|d$�r|j>j�}x�t?j@|	j7�t	|d
i�j7�|j7��D]�\}}|tAjBkrRq4||kr4||kr4t|tCtDkr�tEntD�r�|jFd%d&�d'||<q4t|tG�r�tH|�||<q4|||<q4Wtr�td(t6|j7���|jd2kr
d+}||
|||f}tIjJ|jd,||jK�}|jL|j-d3|j�x6|jFd4�\}}}|s�|jM|�|r]Pq]W|dkr�td/|��nA|	jN|�}tOjP||dd5|j|||dffg�d0|jkr|	|_QdS)6Nzcannot write mode %s as TIFFr4r=rr5rrZtiffinfozTiffinfo Keys: %srr4�descriptionrOZx_resolutionZy_resolutionZresolution_unitZsoftware�	date_timeZartist�	copyrightr�r�z %r is deprecated; use %r insteadrNrr2r1zRGB;Lcss|]}t|�dVqdS)rN)�i8)r%r'r$r$r(r�~sz_save.<locals>.<genexpr>rrzSaving using libtiff encoderz	Items: %srEr�r�r�szConverted items: %s�I;16B�I;16zI;16NrCr-iz(encoder error %d when writing image file�_debug_multipage)r)rtru)rri@)rr)R�	SAVE_INFOr/r�r�rxZencoderinfor�r��
WRITE_LIBTIFFrQrVr�rYrZr�r�rr�rrr�rIrbr`ra�IPTC_NAA_CHUNK�PHOTOSHOP_CHUNK�XMPrr:�IMAGEDESCRIPTION�SOFTWARE�	DATE_TIME�ARTIST�	COPYRIGHTr�r�r�r�r]r��SAMPLESPERPIXELr^r[rWr0Z
getpaletter�rhrc�STRIPBYTECOUNTSr�COMPRESSION_INFO_REVrUrr�rrerfrE�io�UnsupportedOperationr��	itertools�chainrZLIBTIFF_COREr�rLr�r�r8rArZ_getencoderZ
encoderconfigrGr
rr�_saverv)r0r��filenamer;r4rjr��bits�extrarr=rCr�rkr�Zname_with_spacesrNZlutZstride�_fpZ	blocklistZattsZ
legacy_ifdr�rHrJ�er��sr�rr$r$r(r�)s�#

	#									




'


!
&r�z.tifz.tiffz
image/tiff)Z�
__future__rrZPILrrrrr�collectionsZ	fractionsr	�numbersr
rr�r�rer�rEr�r
�__version__r�rdrxZIFD_LEGACY_APIrr}rsrSrYrZr]rUrWrXr|rr�rcr�r`rarVrbr}r~rr8rhrgr^r[r7r�ryrzr:ZEXIFIFDr{ZIMAGEJ_META_DATA_BYTE_COUNTSZIMAGEJ_META_DATArTr�r�r�r_r3r5r<r�r�r8�MutableMappingrxr�r�r��setattrrZImageFileDirectoryrrwr�Z
register_openr�Z
register_saveZregister_extensionZ
register_mimer$r$r$r(�<module>*s�		$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$******--00000000$$$$$$$$$$$$$$**$$--***0y��		W��!$$$!!!�