a
    ¥Q•h”+ ã                î   @   s^  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dlmZmZ ddlmZmZmZmZmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ e e¡ZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4d Z5d!Z6d"Z7d#Z8d$Z9d%Z:d&Z;d'Z<d(Z=d)Z>d*Z?d+Z@d,ZAd-ZBd.ZCd/ZDd0ZEd1ZFd2ZGd3ZHd4ZId5ZJd6ZKd7ZLd8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIœZMdJdK„ eM N¡ D ƒZOe#d dLddLdMfdNe$d dLddLdMfdNe#d dLdOdLdMfdPe$d dLdOdLdMfdPe#ddLddLdMfdQe$ddLddLdMfdQe#ddLdOdLdMfdRe$ddLdOdLdMfdRe#d dLddSdMfdTe$d dLddSdMfdTe#d dLdOdSdMfdUe$d dLdOdSdMfdUe#ddLddSdMfdVe$ddLddSdMfdVe#ddLdOdSdMfdWe$ddLdOdSdMfdWe#d dLddXdMfdYe$d dLddXdMfdYe#d dLdOdXdMfdZe$d dLdOdXdMfdZe#ddLddXdMfd[e$ddLddXdMfd[e#ddLdOdXdMfd\e$ddLdOdXdMfd\e#d dLdd]dMfd^e$d dLdd]dMfd^e#d dLdOd]dMfd_e$d dLdOd]dMfd_e#ddLdd]dMfd`e$ddLdd]dMfd`e#ddSdd]dMfd`e$ddSdd]dMfd`e#ddLdOd]dMfdae$ddLdOd]dMfdae#ddLddbdMfdce#d dLddddMfdee#ddLddddMfdee$ddLddddMfdfe#ddLdOdddMfdge#ddSddddMfdhe$ddSddddMfdie#d djddkdMfdle$d djddkdMfdme#ddLddkdMfdne#ddSddkdMfdoe$ddSddkdMfdpe#ddjddkdMfdle$ddjddkdMfdme#ddLddqdSfdre$ddLddqdSfdre#dOdLddsdMfdte$dOdLddsdMfdte#dOdLdOdsdMfdue$dOdLdOdsdMfdue#dOdLddvdMfdwe$dOdLddvdMfdwe#dOdLddvdxfdye$dOdLddvdxfdye#dOdLddzd{fd|e$dOdLddzd{fd|e#dOdLdd}d~fde$dOdLdd}d~fde#dOdLddvdLfd€e$dOdLddvdLfd€e#dOdLddzd�fd‚e$dOdLddzd�fd‚e#dOdLdd}dƒfd„e$dOdLdd}dƒfd„e#dOdLddvdSfdwe$dOdLddvdSfdwe#dOdLddzd…fd†e$dOdLddzd…fd†e#dOdLdd}d‡fdˆe$dOdLdd}d‡fdˆe#dOdLddvd‰fdwe$dOdLddvd‰fdwe#dOdLddŠdMfd‹e$dOdLddŠdMfdŒe#dOdLdd�dMfdŽe$dOdLdd�dMfd�e#dOdLdd�dxfd�e$dOdLdd�dxfd‘e#dOdLdd�dLfd’e$dOdLdd�dLfd“e#dOdLdd�dSfdŽe$dOdLdd�dSfd�e#d”dLddLdMfd•e$d”dLddLdMfd•e#d”dLdOdLdMfd–e$d”dLdOdLdMfd–e#d”dLddSdMfd—e$d”dLddSdMfd—e#d”dLdOdSdMfd˜e$d”dLdOdSdMfd˜e#d”dLddXdMfd™e$d”dLddXdMfd™e#d”dLdOdXdMfdše$d”dLdOdXdMfdše#d”dLdd]dMfd›e$d”dLdd]dMfd›e#d”dLddqdSfdœe$d”dLddqdSfdœe#d”dLdOd]dMfd�e$d”dLdOd]dMfd�e#dždLddvdMfdŸe$dždLddvdMfdŸe#dždLddzdxfd e$dždLddzdxfd e#dždLdd}d{fd¡e$dždLdd}d{fd¡e#dždLdd�dMfd¢e#d£dLdd]dMfd`e$d£dLdd]dMfd`e#d£dLddsdMfd¤e$d£dLddsdMfd¤e#d¥dLddsdMfd¦e$d¥dLddsdMfd¦iuZPeQd§d¨„ ePD ƒƒZRg d©¢ZSdªd«„ ZTd¬d­„ ZUd®d¯„ ZVi ZWi ZXG d°d±„ d±eƒZYG d²d³„ d³eƒZZeWeZ_WeXeZ_Xe N¡ D ]B\Z[Z\e\ ]d´dµ¡Z\e^eZd¶e\ eWe[ d ƒ e^eZd·e\ eXe[ ƒ �	qn[W[X[[[\G d¸d¹„ d¹eZƒZ_e_Z`G dºd»„ d»ejƒZad¼e#dddLdfd½e#ddd]dfd¾e#dddqdOfd¿e#d”dd]dfdÀe#d”ddqdOfdÁe#ddOdkdfdÂe#dddddfdÃe#ddOdddfdÄe#dd”dkdfdÅe#dOddsdfdÆe#dOddvd fdÇe#dOddvdOfdÈe#džddvdfdÉe#d£ddsdfdÊe#d¥ddsdfdËe$ddOdkdfdÌe$dddddfdÍe$ddOdddfdÎe$dd”dkdfdÏœZbdÐdÑ„ ZcG dÒdÓ„ dÓƒZddÔdÕ„ Zee feajgeaeT¡ e heajgec¡ e ieajgee¡ e jeajgdÖd×g¡ e keajgdØ¡ dS )Ùé    N)ÚMutableMapping)ÚFraction)ÚNumberÚRationalé   )ÚExifTagsÚImageÚ	ImageFileÚImageOpsÚImagePaletteÚTiffTags)Úi16be)Úi32be©Úo8©ÚTYPESFTé   s   IIs   MMé   i  i  i  i  i
  i  é  i  i  i  i  i  i  i(  i-  i1  i2  i;  i=  i@  iB  iC  éD  iE  iJ  iR  iS  i[  i  i  i˜‚  i»ƒ  iI†  is‡  ii‡  i¼  i  i–Æ  i—Æ  ÚrawZ
tiff_ccittZgroup3Zgroup4Ztiff_lzwÚ	tiff_jpegÚjpegÚtiff_adobe_deflateZtiff_raw_16ZpackbitsZtiff_thunderscanÚtiff_deflateZtiff_sgilogZtiff_sgilog24ÚlzmaZzstdÚwebp)r   é   é   é   é   é   é   é   i€  i€  i)€  i²€  it‡  iu‡  imˆ  iPÃ  iQÃ  c                 C   s   i | ]\}}||“qS © r%   )Ú.0ÚkÚvr%   r%   úL/var/www/sistema_ama/venv/lib/python3.9/site-packages/PIL/TiffImagePlugin.pyÚ
<dictcomp>Š   ó    r*   ©r   r%   )Ú1z1;Ir   )r-   z1;IR)r-   r-   )r-   z1;R)r   )ÚLzL;2I)r.   zL;2IR)r.   zL;2)r.   zL;2R)r    )r.   zL;4I)r.   zL;4IR)r.   zL;4)r.   zL;4R)r$   )r.   zL;I)r.   zL;IR)r.   r.   )r.   zL;R)é   )úI;16zI;12)é   )r0   r0   )úI;16Br2   )r0   zI;16R)ÚIúI;16S)r3   úI;16BS)r   )é    )ÚFúF;32F)r7   úF;32BF)r3   zI;32N)r3   úI;32S)r3   úI;32BS)r$   r$   )ÚLAr<   )r$   r$   r$   )ÚRGBr=   )r=   zRGB;R)r$   r$   r$   r$   )ÚRGBAr>   )r   )ÚRGBXr?   )r$   r$   r$   r$   r$   ©r   r   )r?   ZRGBXX)r$   r$   r$   r$   r$   r$   )r   r   r   )r?   ZRGBXXX)r>   ÚRGBa)r   r   )r>   ZRGBaX)r   r   r   )r>   ZRGBaXX)r   r   )r>   ZRGBAX)r   r   r   )r>   ZRGBAXX)iç  )r1   r1   r1   )r=   zRGB;16L)r=   zRGB;16B)r1   r1   r1   r1   )r>   zRGBA;16L)r>   zRGBA;16B)r?   zRGBX;16L)r?   zRGBX;16B)r>   zRGBa;16L)r>   zRGBa;16Br   )ÚPzP;1)rB   zP;1R)rB   zP;2)rB   zP;2R)rB   zP;4)rB   zP;4R)rB   rB   )ÚPArC   )rB   zP;Rr!   )ÚCMYKrD   )rD   ZCMYKX)rD   ZCMYKXX)rD   zCMYK;16Lr"   )r=   r?   r$   )ÚLABrE   c                 c   s   | ]}t |d  ƒV  qdS )r    N)Úlen)r&   Zkey_tpr%   r%   r)   Ú	<genexpr>  r+   rG   )ó   MM *ó   II* s   MM* s   II *s   MM +s   II+ c                 C   s   | d d… t v S ©Nr    )ÚPREFIXES©Úprefixr%   r%   r)   Ú_accept  s    rN   c                 C   s<   t | ƒdk}t|rd|  n| ƒ |¡}|r8|d d d… S |S )Nr   éÿÿÿÿ)ÚabsÚIFDRationalÚlimit_rational)ÚvalÚmax_valÚinvÚn_dr%   r%   r)   Ú_limit_rational  s    rW   c                 C   sP   t | ƒ}|j|jf}t|ƒ|k r.t| t|ƒƒ}t|ƒ|krLt |Ž } t| |ƒ}|S ©N)r   Ú	numeratorÚdenominatorÚminrW   rP   Úmax)rS   rT   Zmin_valÚfracrV   r%   r%   r)   Ú_limit_signed_rational  s    
r^   c                   @   sR  e Zd ZdZdZd4dd„Zedd„ ƒZedd	„ ƒZd
d„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZedƒZedƒZedƒZedƒZedƒZedƒZedƒZedƒZed ƒZed!ƒZed"ƒZed#ƒZed$ƒZed%ƒZed&ƒZed'ƒZe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)e*e+d2ƒ�rNed2ƒZ,d3S )5rQ   zÀ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   c                 C   s†   t |tƒr&|j| _|j| _|j| _dS t |tƒrB|j| _|j| _n|| _|| _|dkrbtdƒ| _n |dkrvt|ƒ| _nt||ƒ| _dS )z®
        :param value: either an integer numerator, a
        float/rational/other number, or an IFDRational
        :param denominator: Optional integer denominator
        Nr   Únanr   )	Ú
isinstancerQ   rY   r_   rZ   r`   ra   r   Úfloat)ÚselfÚvaluerZ   r%   r%   r)   Ú__init__A  s    


zIFDRational.__init__c                 C   s   | j S rX   )r_   ©re   r%   r%   r)   rY   [  s    zIFDRational.numeratorc                 C   s   | j S rX   )r`   rh   r%   r%   r)   rZ   _  s    zIFDRational.denominatorc                 C   s.   | j dkr| j| j fS | j |¡}|j|j fS )z…

        :param max_denominator: Integer, the maximum denominator value
        :returns: Tuple of (numerator, denominator)
        r   )rZ   rY   ra   Úlimit_denominator)re   Úmax_denominatorÚfr%   r%   r)   rR   c  s    
zIFDRational.limit_rationalc                 C   s   t t| jƒƒS rX   )Ústrrd   ra   rh   r%   r%   r)   Ú__repr__p  s    zIFDRational.__repr__c                 C   s
   | j  ¡ S rX   )ra   Ú__hash__rh   r%   r%   r)   rn   s  s    zIFDRational.__hash__c                 C   s0   | j }t|tƒr|j }t|tƒr(t|ƒ}||kS rX   )ra   rc   rQ   rd   )re   ÚotherrS   r%   r%   r)   Ú__eq__v  s    

zIFDRational.__eq__c                 C   s   | j | j| jgS rX   )ra   r_   r`   rh   r%   r%   r)   Ú__getstate__~  s    zIFDRational.__getstate__c                 C   s,   t  | d¡ |\}}}|| _|| _|| _d S )Nr   )rQ   rg   ra   r_   r`   )re   Ústatera   r_   r`   r%   r%   r)   Ú__setstate__�  s
    
zIFDRational.__setstate__c                    s   ‡ fdd„}|S )Nc                    s   t | jˆ ƒ|Ž S rX   )Úgetattrra   )re   Úargs©Úopr%   r)   Údelegate‰  s    z'IFDRational._delegate.<locals>.delegater%   )rw   rx   r%   rv   r)   Ú	_delegateˆ  s    zIFDRational._delegateÚ__add__Ú__radd__Ú__sub__Ú__rsub__Ú__mul__Ú__rmul__Ú__truediv__Ú__rtruediv__Ú__floordiv__Ú__rfloordiv__Ú__mod__Ú__rmod__Ú__pow__Ú__rpow__Ú__pos__Ú__neg__Ú__abs__Ú	__trunc__Ú__lt__Ú__gt__Ú__le__Ú__ge__Ú__bool__Ú__ceil__Ú	__floor__Ú	__round__Ú__int__N)r   )-Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__rg   ÚpropertyrY   rZ   rR   rm   rn   rp   rq   rs   ry   rz   r{   r|   r}   r~   r   r€   r�   r‚   rƒ   r„   r…   r†   r‡   rˆ   r‰   rŠ   r‹   rŒ   r�   rŽ   r�   r�   r‘   r’   r“   Úhasattrr   r”   r%   r%   r%   r)   rQ   3  sT   


rQ   c                   @   s  e Zd ZdZd^dd„Zedd„ ƒZedd„ ƒZed	d„ ƒZej	d
d„ ƒZdd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zeeeejd*d+fejd,d-fejd.d/fejd0d1fej d2d3fej!d4d5fej"d6d7fej#d,d-fej$d8d9fg	ƒƒ ed:d:ƒd_d<d=„ƒZ%ed:ƒd>d?„ ƒZ&ed@d:ƒd`dAdB„ƒZ'ed@ƒdCdD„ ƒZ(edEdFƒdadGdH„ƒZ)edEƒdIdJ„ ƒZ*edKd:ƒdbdLdM„ƒZ+edKƒdNdO„ ƒZ,edPdFƒdcdQdR„ƒZ-edPƒdSdT„ ƒZ.dUdV„ Z/dWdX„ Z0dddZd[„Z1d\d]„ Z2dS )eÚ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] = TiffTags.ASCII
        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
    :attr:`~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
            :py:data:`.TiffTags.TYPES`

          .. versionadded:: 3.0.0

    'Internal' data structures:

        * ``self._tags_v2 = {}``

          * Key: numerical TIFF tag number
          * Value: decoded data, as tuple for multiple values

        * ``self._tagdata = {}``

          * Key: numerical TIFF tag number
          * Value: undecoded byte string from file

        * ``self._tags_v1 = {}``

          * Key: numerical TIFF tag number
          * Value: decoded data in the v1 format

    Tags will be found in the private attributes ``self._tagdata``, and in
    ``self._tags_v2`` once decoded.

    ``self.legacy_api`` is a value for internal use, and shouldn't be changed
    from outside code. In cooperation with
    :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`, if ``legacy_api``
    is true, then decoded tags will be populated into both ``_tags_v1`` and
    ``_tags_v2``. ``_tags_v2`` will be used if this IFD is used in the TIFF
    save routine. Tags should be read from ``_tags_v1`` if
    ``legacy_api == true``.

    ó   II*     Nc                 C   sÈ   t |ƒs dt|ƒ› d�}t|ƒ‚|dur,|n
|dd… | _| jtkrLd| _n| jtkr^d| _nd}t|ƒ‚|d dk| _|| _i | _	|  
¡  | jr¦|  d	|d
d… ¡n|  d|dd… ¡\| _d| _dS )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.
        znot a TIFF file (header z not valid)Nr   ú>ú<znot a TIFF IFDé+   ÚQr$   r.   r    F)rN   ÚreprÚSyntaxErrorÚ_prefixÚMMÚ_endianÚIIÚ_bigtiffÚgroupÚtagtypeÚresetÚ_unpackÚnextÚ_legacy_api)re   ÚifhrM   r©   Úmsgr%   r%   r)   rg   ò  s"    

,ÿzImageFileDirectory_v2.__init__c                 C   s   | j S rX   )r¤   rh   r%   r%   r)   Ú<lambda>  r+   zImageFileDirectory_v2.<lambda>c                 C   s   | j S rX   )Ú_offsetrh   r%   r%   r)   r±     r+   c                 C   s   | j S rX   )r®   rh   r%   r%   r)   r±     r+   c                 C   s   d}t |ƒ‚d S )Nz"Not allowing setting of legacy api)Ú	Exception)re   rf   r°   r%   r%   r)   Ú
legacy_api  s    z ImageFileDirectory_v2.legacy_apic                 C   s(   i | _ i | _i | _i | _d | _d | _d S rX   )Ú_tags_v1Ú_tags_v2Ú_tagdatarª   Ú_nextr²   rh   r%   r%   r)   r«     s    zImageFileDirectory_v2.resetc                 C   s   t t| ƒƒS rX   )rl   Údictrh   r%   r%   r)   Ú__str__#  s    zImageFileDirectory_v2.__str__c                    s   ‡ fdd„ˆ   ¡ D ƒS )z�
        :returns: dict of name|key: value

        Returns the complete tag dictionary, with named tags where possible.
        c                    s"   i | ]\}}t  |ˆ j¡j|“qS r%   )r   Úlookupr©   Úname)r&   Úcoderf   rh   r%   r)   r*   ,  s   ÿz/ImageFileDirectory_v2.named.<locals>.<dictcomp>)Úitemsrh   r%   rh   r)   Únamed&  s    
þzImageFileDirectory_v2.namedc                 C   s   t t| jƒt| jƒB ƒS rX   )rF   Úsetr·   r¶   rh   r%   r%   r)   Ú__len__1  s    zImageFileDirectory_v2.__len__c                 C   sf   || j vr>| j| }| j| }| j| \}}|| || jƒ| |< | j | }| jrbt|ttfƒsb|f}|S rX   )r¶   r·   rª   Ú_load_dispatchr´   rc   ÚtupleÚbytes)re   ÚtagÚdataÚtypÚsizeÚhandlerrS   r%   r%   r)   Ú__getitem__4  s    



z!ImageFileDirectory_v2.__getitem__c                 C   s   || j v p|| jv S rX   )r¶   r·   ©re   rÅ   r%   r%   r)   Ú__contains__?  s    z"ImageFileDirectory_v2.__contains__c                 C   s   |   ||| j¡ d S rX   )Ú_setitemr´   )re   rÅ   rf   r%   r%   r)   Ú__setitem__B  s    z!ImageFileDirectory_v2.__setitem__c              
      s¾  t ttf}t || j¡‰ t||ƒr(|gn|}|| jv�rpˆ jrNˆ j| j|< �n"tj	| j|< t
dd„ |D ƒƒr’t
dd„ |D ƒƒr„tjntj| j|< nÞt
dd„ |D ƒƒ�rt
dd„ |D ƒƒrÆtj| j|< nDt
dd„ |D ƒƒrætj| j|< n$t
dd„ |D ƒƒrþtjntj| j|< ndt
dd„ |D ƒƒ�r.tj| j|< nBt
d	d„ |D ƒƒ�rPtj| j|< n t
d
d„ |D ƒƒ�rptj| j|< | j| tj	k�r’dd„ |D ƒ}n | j| tjk�r²dd„ |D ƒ}| j| tjk�oÌt|tƒ}|�sêt‡ fdd„|D ƒƒ}|�rö| jn| j}|�s²ˆ jdk�s@| j| tjk�s@ˆ jd u �r²t|ƒdk�r²|�s²|�rd| j| tjtjfv �rd|f}z|\||< W n< t�y®   t d|› dt|ƒ› d�¡ |d ||< Y n0 n|||< d S )Nc                 s   s   | ]}t |tƒV  qd S rX   )rc   rQ   ©r&   r(   r%   r%   r)   rG   P  r+   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>c                 s   s   | ]}|d kV  qdS ©r   Nr%   rÏ   r%   r%   r)   rG   S  r+   c                 s   s   | ]}t |tƒV  qd S rX   )rc   ÚintrÏ   r%   r%   r)   rG   V  r+   c                 s   s&   | ]}d |  kodk n  V  qdS )r   r   Nr%   rÏ   r%   r%   r)   rG   W  r+   c                 s   s&   | ]}d |  k odk n  V  qdS )i €ÿÿi €  Nr%   rÏ   r%   r%   r)   rG   Y  r+   c                 s   s   | ]}|d kV  qdS rÐ   r%   rÏ   r%   r%   r)   rG   ^  r+   c                 s   s   | ]}t |tƒV  qd S rX   )rc   rd   rÏ   r%   r%   r)   rG   a  r+   c                 s   s   | ]}t |tƒV  qd S rX   )rc   rl   rÏ   r%   r%   r)   rG   c  r+   c                 s   s   | ]}t |tƒV  qd S rX   )rc   rÄ   rÏ   r%   r%   r)   rG   e  r+   c                 S   s&   g | ]}t |tƒr| d d¡n|‘qS )ÚasciiÚreplace)rc   rl   ÚencoderÏ   r%   r%   r)   Ú
<listcomp>i  s   ÿz2ImageFileDirectory_v2._setitem.<locals>.<listcomp>c                 S   s"   g | ]}t |tƒrt|ƒn|‘qS r%   )rc   rÑ   rd   rÏ   r%   r%   r)   rÕ   n  r+   c                 3   s   | ]}ˆ   |¡V  qd S rX   )Úcvt_enum©r&   rf   ©Úinfor%   r)   rG   r  r+   r   zMetadata Warning, tag z had too many entries: z, expected 1r   )r   rÄ   rl   r   r»   r©   rc   rª   ÚtypeÚ	UNDEFINEDÚallÚRATIONALÚSIGNED_RATIONALÚSHORTÚSIGNED_SHORTÚLONGÚSIGNED_LONGÚDOUBLEÚASCIIÚBYTEr¹   rÃ   rµ   r¶   ÚlengthrF   Ú
ValueErrorÚwarningsÚwarn)re   rÅ   rf   r´   Z	basetypesÚvaluesÚis_ifdÚdestr%   rØ   r)   rÍ   E  s~    
ÿý
ÿý
þÿþý
ýýþÿÿzImageFileDirectory_v2._setitemc                 C   s.   | j  |d ¡ | j |d ¡ | j |d ¡ d S rX   )r¶   Úpoprµ   r·   rË   r%   r%   r)   Ú__delitem__•  s    z!ImageFileDirectory_v2.__delitem__c                 C   s   t t| jƒt| jƒB ƒS rX   )ÚiterrÀ   r·   r¶   rh   r%   r%   r)   Ú__iter__š  s    zImageFileDirectory_v2.__iter__c                 C   s   t  | j| |¡S rX   )ÚstructÚunpackr¦   )re   ÚfmtrÆ   r%   r%   r)   r¬   �  s    zImageFileDirectory_v2._unpackc                 G   s   t j| j| g|¢R Ž S rX   )rñ   Úpackr¦   )re   ró   rê   r%   r%   r)   Ú_pack   s    zImageFileDirectory_v2._packc                    s   ‡ ‡fdd„}|S )Nc                    sB   ddl m} | j d¡r2| jdd …  dd¡|ˆ < ˆ| ftˆ < | S )Nr   r   Úload_r!   Ú_ú )r   r   r•   Ú
startswithrÓ   rÂ   )Úfuncr   ©ÚidxrÈ   r%   r)   Ú	decorator¤  s
    z9ImageFileDirectory_v2._register_loader.<locals>.decoratorr%   )rü   rÈ   rý   r%   rû   r)   Ú_register_loader£  s    z&ImageFileDirectory_v2._register_loaderc                    s   ‡ fdd„}|S )Nc                    s   | t ˆ < | S rX   )Ú_write_dispatch)rú   ©rü   r%   r)   rý   ¯  s    z9ImageFileDirectory_v2._register_writer.<locals>.decoratorr%   )rü   rý   r%   r   r)   Ú_register_writer®  s    z&ImageFileDirectory_v2._register_writerc                    sX   ddl m} | \}‰ }|||< t dˆ  ¡‰ˆd‡ ‡fdd„	ft|< ‡ fdd„t|< d S )	Nr   r   ú=Tc                    s   |   t|ƒˆ › ˆ › �|¡S rX   )r¬   rF   ©re   rÆ   r´   ©ró   rÈ   r%   r)   r±   ½  s    z7ImageFileDirectory_v2._register_basic.<locals>.<lambda>c                    s   d  ‡‡ fdd„|D ƒ¡S )Nr+   c                 3   s   | ]}ˆ  ˆ |¡V  qd S rX   )rõ   r×   )ró   re   r%   r)   rG   Â  r+   zJImageFileDirectory_v2._register_basic.<locals>.<lambda>.<locals>.<genexpr>©Újoin©re   rê   )ró   rh   r)   r±   Á  s    )T)r   r   rñ   ÚcalcsizerÂ   rÿ   )Zidx_fmt_namer   rü   r¼   r%   r  r)   Ú_register_basicµ  s    
þz%ImageFileDirectory_v2._register_basicÚHÚshortr.   ÚlongÚbzsigned byteÚhzsigned shortÚlzsigned longrk   rd   ÚdÚdoubler¡   Zlong8r   Tc                 C   s   |S rX   r%   r  r%   r%   r)   Ú	load_byteÖ  s    zImageFileDirectory_v2.load_bytec                 C   s*   t |tƒrt|ƒ}t |tƒr&t|fƒ}|S rX   )rc   rQ   rÑ   rÄ   ©re   rÆ   r%   r%   r)   Ú
write_byteÚ  s
    


z ImageFileDirectory_v2.write_byter   c                 C   s"   |  d¡r|d d… }| dd¡S )Nó    rO   zlatin-1rÓ   )ÚendswithÚdecoder  r%   r%   r)   Úload_stringâ  s    
z!ImageFileDirectory_v2.load_stringc                 C   s0   t |tƒrt|ƒ}t |tƒs(| dd¡}|d S )NrÒ   rÓ   r  )rc   rÑ   rl   rÄ   rÔ   ©re   rf   r%   r%   r)   Úwrite_stringè  s
    

z"ImageFileDirectory_v2.write_stringr!   r$   c                    sV   |   t|ƒd › d�|¡}‡fdd„‰ t‡ fdd„t|d d d… |dd d… ƒD ƒƒS )	Nr    r.   c                    s   ˆ r| |fS t | |ƒS rX   ©rQ   ©Úar  ©r´   r%   r)   Úcombineõ  s    z4ImageFileDirectory_v2.load_rational.<locals>.combinec                 3   s   | ]\}}ˆ ||ƒV  qd S rX   r%   ©r&   ÚnumÚdenom©r  r%   r)   rG   ø  r+   z6ImageFileDirectory_v2.load_rational.<locals>.<genexpr>r   r   ©r¬   rF   rÃ   Úzip©re   rÆ   r´   Úvalsr%   ©r  r´   r)   Úload_rationalñ  s    z#ImageFileDirectory_v2.load_rationalc                    s   d  ‡ fdd„|D ƒ¡S )Nr+   c                 3   s&   | ]}ˆ j d gt|dƒ¢R Ž V  qdS )Z2Ll   ÿÿ N)rõ   rW   ©r&   r]   rh   r%   r)   rG   ü  s   z7ImageFileDirectory_v2.write_rational.<locals>.<genexpr>r  r  r%   rh   r)   Úwrite_rationalú  s    ÿz$ImageFileDirectory_v2.write_rationalr#   c                 C   s   |S rX   r%   r  r%   r%   r)   Úload_undefined   s    z$ImageFileDirectory_v2.load_undefinedc                 C   s   t |tƒrt|ƒ dd¡}|S )NrÒ   rÓ   )rc   rÑ   rl   rÔ   r  r%   r%   r)   Úwrite_undefined  s    
z%ImageFileDirectory_v2.write_undefinedé
   c                    sV   |   t|ƒd › d�|¡}‡fdd„‰ t‡ fdd„t|d d d… |dd d… ƒD ƒƒS )	Nr    r  c                    s   ˆ r| |fS t | |ƒS rX   r  r  r  r%   r)   r    s    z;ImageFileDirectory_v2.load_signed_rational.<locals>.combinec                 3   s   | ]\}}ˆ ||ƒV  qd S rX   r%   r   r#  r%   r)   rG     r+   z=ImageFileDirectory_v2.load_signed_rational.<locals>.<genexpr>r   r   r$  r&  r%   r(  r)   Úload_signed_rational
  s    z*ImageFileDirectory_v2.load_signed_rationalc                    s   d  ‡ fdd„|D ƒ¡S )Nr+   c                 3   s(   | ] }ˆ j d gt|ddƒ¢R Ž V  qdS )Z2liÿÿÿi   €N)rõ   r^   r*  rh   r%   r)   rG     s   ÿz>ImageFileDirectory_v2.write_signed_rational.<locals>.<genexpr>r  r  r%   rh   r)   Úwrite_signed_rational  s    þz+ImageFileDirectory_v2.write_signed_rationalc                 C   s8   |  |¡}t|ƒ|kr4d|› dt|ƒ› d�}t|ƒ‚|S )Nz&Corrupt EXIF data.  Expecting to read ú bytes but only got z. )ÚreadrF   ÚOSError)re   ÚfprÈ   Úretr°   r%   r%   r)   Ú_ensure_read  s    
ÿÿÿz"ImageFileDirectory_v2._ensure_readc              
   C   s€  |   ¡  | ¡ | _�z0| jr0|  d|  |d¡¡n|  d|  |d¡¡d }t|ƒD �]º}| jrp|  d|  |d¡¡n|  d|  |d	¡¡\}}}}t || j	¡j
}t |d
¡}	d|› d|› d|	› d|› d�	}
z| j| \}}W n$ tyü   t d|
|¡ Y qPY n0 || }|| j�rdndk�rt| ¡ }|  | j�r4dnd|¡\}|
d|› d|› �7 }
| |¡ t ||¡}| |¡ n|d |… }t|ƒ|k�rºt d|› dt|ƒ› d|› �¡ t |
¡ qP|�sÌt |
¡ qP|| j|< || j|< |
d|dk�röd| nt|ƒ 7 }
t |
¡ qP| j�r*|  d|  |d¡¡n|  d|  |d¡¡\| _W n6 t�yz }
 zt t|
ƒ¡ W Y d }
~
d S d }
~
0 0 d S )Nr¡   r$   r
  r   r   ZHHQ8sé   ÚHHL4sr/   Úunknownztag: ú (ú
) - type: ú)z%s - unsupported type %sr    r.   z Tag Location: z - Data Location: z/Possibly corrupt EXIF data.  Expecting to read r1  z. Skipping tag ú
 - value: r6   ú<table: %d bytes>)r«   Útellr²   r¨   r¬   r6  Úranger   r»   r©   r¼   r   ÚgetrÂ   ÚKeyErrorÚloggerÚdebugÚseekr	   Ú
_safe_readrF   rè   ré   r·   rª   r¢   r­   r3  rl   )re   r4  Z	tag_countÚirÅ   rÇ   ÚcountrÆ   ÚtagnameÚtypnamer°   Ú	unit_sizerÉ   rÈ   ÚhereÚoffsetr%   r%   r)   Úload$  st    
ÿüÿý


ÿÿþÿ



ÿÿý
zImageFileDirectory_v2.loadr   c              
   C   s  |   dt| jƒ¡}g }|t|ƒ t| jƒd  d }d }t| j ¡ ƒD �]Ö\}}|tkr`t|ƒ}| j |¡}t 	d||t
|ƒ¡ |tjko’t|tƒ}|rè| jdkr¨d}	nd}	t|	|d�}
| j| }| ¡ D ]\}}||
|< qÊ|
 |¡}n*t|tƒrö|n|f}| j| | g|¢R Ž }t || j¡j}|�r,d	n
t |d
¡}d|› d|› d|› d|› d�	}|dt|ƒdk�rtdt|ƒ nt|ƒ 7 }t 	|¡ |�r–d}n(|tjtjtjfv �r¶t|ƒ}nt|ƒ}t|ƒdk�rê| |||| dd¡df¡ qF| ||||   d|¡|f¡ |t|ƒd d d 7 }qF|d u�r||| \}}}}}|�rNd}t|ƒ‚|   d|  d|¡d | ¡}|||||f||< |D ]B\}}}}}t 	d|||t
|ƒt
|ƒ¡ ||   d||||¡7 }�q€|d7 }|D ].\}}}}}||7 }t|ƒd@ �rÐ|d7 }�qÐ|S )Nr
  r/   r    zTag %s, Type: %s, Value: %srŸ   s   II*    s   MM *   )r©   Úifdr9  zsave: r:  r;  r<  r=  r1   r>  r   r  r+   r.   r   z&multistrip support not yet implementedr   z%s %s %s %s %sr8  s       ) rõ   rF   r¶   Úsortedr¾   ÚSTRIPOFFSETSrª   rA  rC  rD  r¢   r   rá   rc   r¹   r¦   rœ   ÚtobytesrÃ   rÿ   r»   r©   r¼   r   rl   rå   rä   rÛ   ÚappendÚljustÚNotImplementedErrorr¬   )re   rM  ÚresultÚentriesZstripoffsetsrÅ   rf   rÇ   rë   r¯   rO  rê   Úifd_tagZ	ifd_valuerÆ   rI  rJ  r°   rH  r%   r%   r)   rR  g  sj    


 ÿ


zImageFileDirectory_v2.tobytesc                 C   sN   |  ¡ dkr&| | j|  ddd¡ ¡ |  ¡ }|  |¡}| |¡ |t|ƒ S )Nr   ZHLé*   r$   )r?  Úwriter¤   rõ   rR  rF   )re   r4  rM  rV  r%   r%   r)   Úsave´  s    

zImageFileDirectory_v2.save)r�   NN)T)T)T)T)T)r   )3r•   r–   r—   r˜   rg   rš   rM   rM  r´   Úsetterr«   rº   r¿   rÁ   rÊ   rÌ   rÎ   rÍ   rî   rð   r¬   rõ   rþ   r  r	  ÚlistÚmapr   rß   rá   ÚSIGNED_BYTErà   râ   ÚFLOATrã   ÚIFDÚLONG8r  r  r  r  r)  r+  r,  r-  r/  r0  r6  rN  rR  r[  r%   r%   r%   r)   rœ   µ  sz   <
 
P








÷þÿ





C
Mrœ   rø   r÷   rö   Zwrite_c                       s~   e Zd ZU dZ‡ fdd„Zedd„ ƒZedd„ ƒZee	d< e
dd	„ ƒZd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z‡  ZS )Ú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] = TiffTags.ASCII
        print(ifd[key])
        ('Some Data',)

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

    Values are returned as a tuple.

    ..  deprecated:: 3.0.0
    c                    s   t ƒ j|i |¤Ž d| _d S )NT)Úsuperrg   r®   )re   ru   Úkwargs©Ú	__class__r%   r)   rg   Ü  s    zImageFileDirectory_v1.__init__c                 C   s   | j S rX   )rµ   rh   r%   r%   r)   r±   à  r+   zImageFileDirectory_v1.<lambda>c                 C   s   | j S rX   )r·   rh   r%   r%   r)   r±   á  r+   rª   c                 C   s(   | |j d�}|j|_|j|_|j|_|S )a2  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`

        rL   )rM   r·   rª   r­   )ÚclsÚoriginalrO  r%   r%   r)   Úfrom_v2ç  s
    zImageFileDirectory_v1.from_v2c                 C   s4   t | jd�}t| jƒ|_t| jƒ|_t| jƒ|_|S )a2  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`

        rL   )rœ   rM   r¹   r·   rª   r¶   )re   rO  r%   r%   r)   Úto_v2ù  s
    zImageFileDirectory_v1.to_v2c                 C   s   || j v p|| jv S rX   )rµ   r·   rË   r%   r%   r)   rÌ   
  s    z"ImageFileDirectory_v1.__contains__c                 C   s   t t| jƒt| jƒB ƒS rX   )rF   rÀ   r·   rµ   rh   r%   r%   r)   rÁ     s    zImageFileDirectory_v1.__len__c                 C   s   t t| jƒt| jƒB ƒS rX   )rï   rÀ   r·   rµ   rh   r%   r%   r)   rð     s    zImageFileDirectory_v1.__iter__c                 C   s   dD ]}|   |||¡ qd S ©N)FT)rÍ   )re   rÅ   rf   r´   r%   r%   r)   rÎ     s    z!ImageFileDirectory_v1.__setitem__c                 C   sn   || j vrL| j| }| j| }| j| \}}dD ]}|  ||| ||ƒ|¡ q0| j | }t|ttfƒsj|f}|S rl  )rµ   r·   rª   rÂ   rÍ   rc   rÃ   rÄ   )re   rÅ   rÆ   rÇ   rÈ   rÉ   ÚlegacyrS   r%   r%   r)   rÊ     s    



z!ImageFileDirectory_v1.__getitem__)r•   r–   r—   r˜   rg   rš   ÚtagsÚtagdatar¹   Ú__annotations__Úclassmethodrj  rk  rÌ   rÁ   rð   rÎ   rÊ   Ú__classcell__r%   r%   rf  r)   rc  É  s   

rc  c                       sŠ   e Zd ZdZdZdZd‡ fdd„	Zdd„ Zed	d
„ ƒZ	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Z‡ fdd„Zdd„ Zdd„ Zdd„ Z‡  ZS )ÚTiffImageFileZTIFFz
Adobe TIFFFNc                    s   d | _ d | _tƒ  ||¡ d S rX   )Útag_v2rÅ   rd  rg   )re   r4  Úfilenamerf  r%   r)   rg   1  s    zTiffImageFile.__init__c                 C   s˜   | j  d¡}|d dkr(|| j  d¡7 }t|ƒ| _d| _| jj | _| _d| _| j | _	g | _
d| _t d¡ t d| j¡ t dt|ƒ¡ |  d	¡ dS )
z#Open the first image in a TIFF filer$   r   r    NrO   z*** TiffImageFile._open ***z- __first: %sz	- ifh: %sr   )r4  r2  rœ   rt  rO  r­   Z_TiffImageFile__firstÚ_TiffImageFile__nextÚ_TiffImageFile__frameÚ_fpÚ
_frame_posÚ	_n_framesrC  rD  r¢   Ú_seek)re   r¯   r%   r%   r)   Ú_open:  s    

zTiffImageFile._openc                 C   sP   | j d u rJ|  ¡ }|  t| jƒ¡ | j d u r@|  |  ¡ d ¡ q"|  |¡ | j S )Nr   )rz  r?  r{  rF   ry  rE  )re   Úcurrentr%   r%   r)   Ún_framesU  s    


zTiffImageFile.n_framesc                 C   s<   |   |¡sdS |  |¡ t | j¡ tj | j| j¡| _dS )z%Select a given frame as current imageN)	Ú_seek_checkr{  r   Ú_decompression_bomb_checkrÈ   ÚcoreÚnewÚmodeÚim)re   Úframer%   r%   r)   rE  _  s
    

zTiffImageFile.seekc                 C   s6  | j | _| j ¡  t| jƒ|krè| js2d}t|ƒ‚t d|| j	| j| j ¡ ¡ | j 
| j¡ | j | j¡ t d| j ¡ ¡ | j | j¡ | jj| jv r d| _n
| jj| _| jdkr¾|d | _t| jƒdkrØ| jdk| _|  j	d7  _	q| j 
| j| ¡ | j | j¡ |  ¡  t | j¡ | _| _|| _	|  ¡  d S )Nzno more images in TIFF filez9Seeking to frame %s, on frame %s, __next %s, location: %szLoading tags, location: %sr   r   )rx  r4  r?  rF   ry  rv  ÚEOFErrorrC  rD  rw  rE  rS  rt  rN  r­   rz  Úis_animatedÚ_reload_exifrc  rj  rÅ   rO  Ú_setup)re   r…  r°   r%   r%   r)   r{  j  s>    
û


zTiffImageFile._seekc                 C   s   | j S )zReturn the current frame number)rw  rh   r%   r%   r)   r?  “  s    zTiffImageFile.tellc                 C   s   t | jv r|  | jt  ¡S i S )z™
        Returns a dictionary containing the XMP tags.
        Requires defusedxml to be installed.

        :returns: XMP tags in a dictionary.
        )ÚXMPrt  Ú_getxmprh   r%   r%   r)   Úgetxmp—  s    zTiffImageFile.getxmpc                 C   s¶   i }| j  tjj¡}|r²|dd… dkr²t|dd… ƒ}t |d d d ¡d }t|d| d| … ƒ}|d| d| | … }d|i||< |t d| | d ¡d d… }q|S )	a5  
        Returns a dictionary of Photoshop "Image Resource Blocks".
        The keys are the image resource ID. For more information, see
        https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#50577409_pgfId-1037727

        :returns: Photoshop "Image Resource Blocks" in a dictionary.
        Nr    s   8BIMr"   r   r   r.  rÆ   )	rt  rA  r   ÚBaseÚImageResourcesÚi16ÚmathÚceilÚi32)re   ÚblocksrS   ÚidÚnrÈ   rÆ   r%   r%   r)   Úget_photoshop_blocks   s    $z"TiffImageFile.get_photoshop_blocksc                    s   | j r| jr|  ¡ S tƒ  ¡ S rX   )ÚtileÚuse_load_libtiffÚ_load_libtiffrd  rN  rh   rf  r%   r)   rN  µ  s    zTiffImageFile.loadc                 C   sj   | j s>d| _| j ¡  |  ¡ }tjD ]}||vr2q$| |¡ q$tj	| dd� t
jj| jv rf| jt
jj= d S )NT)Úin_place)r‡  Ú!_close_exclusive_fp_after_loadingr4  r?  Úgetexifr   ÚTAGS_V2_GROUPSÚget_ifdr
   Úexif_transposer   r�  ÚOrientationrt  )re   ÚexifÚkeyr%   r%   r)   Úload_endº  s    

zTiffImageFile.load_endc           
   
   C   sâ  t j  | ¡ |  ¡  t| jƒdks.d}t|ƒ‚| jd d }t| jd d ƒ}z0t| jdƒod| j 	¡ }t| jdƒr|| j 
¡  W n ty”   d}Y n0 |r¢||d< t  | jd	t|ƒ| j¡}z| | j|¡ W n2 tyþ } zd
}t|ƒ|‚W Y d}~n
d}~0 0 | j�o| j }t| jdƒ�r>t d¡ | | j ¡ ¡\}}	n\|�rpt d¡ |�s`| j d¡ | d¡\}}	n*t d¡ | j d¡ | | j ¡ ¡\}}	g | _d| _|  ¡  |�rÄ| j ¡  d| _|	dk �rÖt|	ƒ‚t j  | ¡S )zWOverload method triggered when we detect a compressed tiff
        Calls out to libtiffr   zNot exactly one tiler   r   ÚfilenoÚflushFr   ÚlibtiffzCouldn't set the imageNÚgetvaluez5have getvalue. just sending in a string from getvaluez3have fileno, calling fileno version of the decoder.s   fpfpz+don't have fileno or getvalue. just reading)r   rN  Úload_preparerF   r—  r3  r]  r›   r4  r¤  r¥  Ú_getdecoderrƒ  rÃ   ÚdecoderconfigÚsetimager„  rç   Ú_exclusive_fpr‡  rC  rD  r  r§  rE  r2  Úreadonlyr£  Úclose)
re   r°   Úextentsru   r4  ÚdecoderÚeZclose_self_fpr•  Úerrr%   r%   r)   r™  Ï  sX    
ÿ 





zTiffImageFile._load_libtiffc              
   C   s  d| j v rd}t|ƒ‚t| j  td¡ | _| j  td¡| _| j  td¡}| jdkrVd}| j  t	d¡}t
 d¡ t
 d| j¡ t
 d	|¡ t
 d
| j¡ t
 d|¡ t
 d| j t¡¡ t| j  t¡ƒ}t| j  t¡ƒ}||f| _t
 d| j¡ | j  td¡}t|ƒdk�r2t|ƒt|ƒ  k�r*dk�r2n nd}| j  td¡}| j  td¡}|dv �r^d}	n|dk�rnd}	nd}	|	t|ƒ7 }	t|ƒ}
| j  t| jdk�r¨|dv �r¨dnd¡}|tk�rÐt
 d|¡ d}t|ƒ‚||
k �rè|d|… }n||
k�r|
dk�r|| }t|ƒ|k�rd}t|ƒ‚| j j|||||f}t
 d|¡ zt| \| _}W n> t �yŽ } z$t
 d¡ d}t|ƒ|‚W Y d}~n
d}~0 0 t
 d|¡ t
 d| j!¡ | j| j"d< | j  t#d¡}| j  t$d¡}|�r\|�r\| j  t%¡}|dk�r||f| j"d < nX|dk�r&|d! |d! f| j"d < n6|du �rN||f| j"d < ||f| j"d"< n||f| j"d"< d } }}g | _&t'�p|| jd#k| _(| j(�rZ|dk�rÈ|dd… d |dd…  }t
 d|¡ t| \| _}|d$k�rÖd%}d&|v �rì| )d&d'¡}d(|v �r| )d(d'¡}|dk�r(| jd)k�r(| jdk�r(d*}|| jd+| j j*f}| j& +d,dd||fd|f¡ �nXt,| j v �srt-| j v �rœt,| j v �r¢| j t, }| j  t.|¡}| jd }n"| j t- }| j  t/¡}| j  t0¡}|D ]Ð}|| |k�rì|t1|ƒ d- }nd}|}| jdk�r|| }||	 }|t|ƒdf}| j& +| j||t|| |ƒt|| |ƒf||f¡ || }|| jd k�rÈd||  }}|| jd k�rÈd }}|d7 }�qÈnt
 d.¡ d}t|ƒ‚t2| j v �rÎ| j t2 | j"d/< | j!d0v �rd1d2„ | j t3 D ƒ}t4 5d3d4 6|¡¡| _7dS )5z-Setup this image object based on current tagsi¼  z+Windows Media Photo files not yet supportedr   r   r   r"   z*** Summary ***z- compression: %sz - photometric_interpretation: %sz- planar_configuration: %sz- fill_order: %sz- YCbCr subsampling: %sz
- size: %sr,   r%   )r   r"   r$   r   r!   r    )r   r"   z.More samples per pixel than can be decoded: %sz#Invalid value for samples per pixelNzunknown data organizationzformat key: %sz- unsupported formatzunknown pixel modez- raw mode: %sz- pil mode: %sÚcompressionr   ÚdpigR¸…ëQ@Ú
resolutionr   r0   úI;16Nz;16Bz;16Nz;16Lr   r=   Fr¦  r$   z- unsupported data organizationÚicc_profile©rB   rC   c                 S   s   g | ]}t |d  ƒ‘qS ©r   r   )r&   r  r%   r%   r)   rÕ     r+   z(TiffImageFile._setup.<locals>.<listcomp>úRGB;Lr+   )8rt  r3  ÚCOMPRESSION_INFOrA  ÚCOMPRESSIONÚ_compressionÚPLANAR_CONFIGURATIONZ_planar_configurationÚPHOTOMETRIC_INTERPRETATIONÚ	FILLORDERrC  rD  rÅ   ÚYCBCRSUBSAMPLINGrÑ   Ú
IMAGEWIDTHÚIMAGELENGTHÚ_sizerÈ   ÚSAMPLEFORMATrF   r\   r[   ÚBITSPERSAMPLEÚEXTRASAMPLESÚSAMPLESPERPIXELÚMAX_SAMPLESPERPIXELÚerrorr£   rM   Ú	OPEN_INFOÚ_moderB  rƒ  rÙ   ÚX_RESOLUTIONÚY_RESOLUTIONÚRESOLUTION_UNITr—  ÚREAD_LIBTIFFr˜  rÓ   rM  rS  rQ  ÚTILEOFFSETSÚROWSPERSTRIPÚ	TILEWIDTHÚ
TILELENGTHÚsumÚ
ICCPROFILEÚCOLORMAPr   r   r  Úpalette)re   r°   ÚphotoZ	fillorderÚxsizeÚysizeZsample_formatZ	bps_tupleZextra_tupleZ	bps_countZbps_actual_countZsamples_per_pixelr¢  Úrawmoder±  ZxresZyresZresunitÚxÚyÚlayerr  Úoffsetsr  ÚwrM  ÚstrideZtile_rawmoderØ  r%   r%   r)   r‰  $  s   



2

þ
ÿ
ú
 






ÿþý 

üÿ
zTiffImageFile._setup)NN)r•   r–   r—   ÚformatÚformat_descriptionr›  rg   r|  rš   r~  rE  r{  r?  rŒ  r–  rN  r£  r™  r‰  rr  r%   r%   rf  r)   rs  ,  s    	
	)	Urs  r-   r.   r<   rB   rC   r:   r0   r4   r8   r=   r?   r>   rD   ÚYCbCrrE   r;   r2   r5   r9   )r-   r.   r<   rB   rC   r3   r0   r4   r7   r=   r?   r>   rD   rå  rE   r;   r2   r5   r9   c           2      C   s<	  zt | j \}}}}}}W n< tyV }	 z$d| j› d�}
t|
ƒ|	‚W Y d }	~	n
d }	~	0 0 t|d�}| j}| j}z|d }W n, ty¦   | j d¡}t	|t
ƒr¢d }Y n0 |d u r¶d}n|dkrÄd}n|dkrÐd	}tpÚ|dk}d
|t< | jd |t< | jd
 |t< d|v �r|d }n:d|v �rJ|d }t	|tƒ�rNt ¡ }| |¡ |}ni }t dt|ƒ¡ t	|tƒ�rr| ¡ }|D ]h}t	|tjƒ�r¤|tjv �r¤| |¡||< n| |¡||< z|j| |j|< W n t�yÚ   Y n0 �qvt| dƒ�r0tt t!t"t#t$fD ]2}|| j%v �rü| j%| ||< | j%j| |j|< �qü| d| j d¡¡}|�rR||t&< t'dft dft!dft dft!dftdft(dft)dft*dft+dff
D ] \}}||v �r’|| ||< �q’| d¡}|�räd|t< |d |t < |d
 |t!< |dk�r||t,< t-|ƒd
k�rt-|ƒ|t.< |d u�r"||t/< |d
k�r4||t0< t1|v�rH||t1< nŒ| jdv �rÔ|t1 dk�rÔ| jdk�rÊ|  2¡ }| ¡ }t3|j4ƒD ]:}t3|j5ƒD ](}|||f dk�r°dnd|||f< �q–�qˆ|} n
t6 7| ¡} | jd v �rN| j8 9d!d"¡}g }t-|ƒd# }t3d#ƒD ]>}|d$d%„ ||| ||d
  … D ƒ7 }|dgd&|  7 }�q||t:< t-|ƒ| jd |d  d' d(  }|�rÌ| d)t;¡}|dk�r�d
nt<|| | jd
 ƒ} |dk�rÖt<| d' d( d( | jd
 ƒ} n
| jd
 } | dk�räd
} |dk�ròd
n||  }!| jd
 |  d
 |  }"| |t=< |!d*k�r.tj>|jt?< |!f|"d
  || jd
  |!|"d
   f |t?< t@t3d|!|" |!ƒƒ|tA< tB |d
¡|tC< | jd+k�r¸tDd,tEd-i F¡ D ]\}#}$| G|#|$¡ �q tHtItJtKg}%|�rèd.|v �r&|d. }&t	|&t
ƒ�rü|&dk �sü|&d/k�rd0}
tL|
ƒ‚|dk�rd1}
tL|
ƒ‚|&|tM< t d2¡ t d3tN| F¡ ƒ¡ d}'t|d4ƒ�rˆz| Od¡ tP Q| R¡ ¡}'W n tSjT�y†   Y n0 i }(|%tEt?tAtUtVg7 }%t,|d i})i }*t| d5ƒ�rÄ| jW ¡ }*i tX| di ƒ¥|*¥}+t0|+v �rè|+t0= tY Z| F¡ |+ F¡ ¡D ]Ò\}#}$|#tj[v�rttXtj\d6d7ƒ�s$�qü|#|jv �r@|j|# |(|#< n4t	|$t
t]t^tfƒ�sZ�qünt _|#¡j`},|,�rt|,|(|#< |#|)v�rü|#|%v�rüt	|$t^ƒ�rª|$ ad8d9¡d: |)|#< n"t	|$tbƒ�rÄt]|$ƒ|)|#< n|$|)|#< �qüt0|)v �rüt-|)t0 ƒd
k�rü|)t0 d |)t0< t d;tN|) F¡ ƒ¡ | jd<v �r d=}t|) F¡ ƒ}-|- c¡  |||'||-|(f}.t d| jd>|.|¡}	|	 e| j8d?| j ¡ |	 ad@¡d
d … \}/}0|'�s�| f|0¡ |/�rj�qž�qj|'�rÈztP g|'¡ W n t�yÆ   Y n0 |/dk �	r(dA|/› dB�}
t|
ƒ‚n@|%D ]}#||#= �qì| h|¡}1ti j| |dd?| j |1||d
ffg¡ dC|v �	r8|| _kd S )DNzcannot write mode z as TIFFrL   r³  r   r   r   r   r   r   r   Ztiffinfor¡  zTiffinfo Keys: %srt  r·  Údescriptionrµ  Úx_resolutionZy_resolutionÚresolution_unitÚsoftwareÚ	date_timeZartistÚ	copyrightr´  r   r,   )r-   r.   r-   éÿ   r¸  r=   rº  r   c                 S   s   g | ]}|d  ‘qS r¹  r%   rÏ   r%   r%   r)   rÕ   ¥  r+   z_save.<locals>.<listcomp>r   r#   r$   Z
strip_sizer   rå  )r   r   )r   rì  é€   rì  rí  rì  Úqualityéd   zInvalid quality settingz5quality setting only supported for 'jpeg' compressionzSaving using libtiff encoderz	Items: %sr¤  rÅ   Úlibtiff_support_custom_tagsFrÒ   rÓ   r  zConverted items: %s)r2   r0   r¶  r¦  r@   i @  zencoder error z when writing image fileÚ_debug_multipage)lÚ	SAVE_INFOrƒ  rB  r3  rœ   ÚencoderinfoÚencoderconfigrÙ   rA  rc   rÑ   ÚWRITE_LIBTIFFr¾  rÈ   rÂ  rÃ  rÄ   r   ÚExifrN  rC  rD  r]  rc  rk  r   r�  rž  rª   r³   r›   rÏ  rÍ  rÎ  ÚIPTC_NAA_CHUNKÚPHOTOSHOP_CHUNKrŠ  rt  rÖ  ÚIMAGEDESCRIPTIONÚSOFTWAREÚ	DATE_TIMEÚARTISTÚ	COPYRIGHTrÆ  rF   rÈ  rÇ  rÅ  r¿  Úcopyr@  ÚheightÚwidthr
   Úinvertr„  Ú
getpaletter×  Ú
STRIP_SIZEr[   rÒ  rá   ÚSTRIPBYTECOUNTSrÃ   rQ  ÚCOMPRESSION_INFO_REVr¼  rÁ  ÚREFERENCEBLACKWHITEr¾   Ú
setdefaultrÓ  rÔ  rÑ  ÚTILEBYTECOUNTSrç   ÚJPEGQUALITYrP  rE  ÚosÚdupr¤  ÚioÚUnsupportedOperationÚTRANSFERFUNCTIONÚSUBIFDrÅ   rt   Ú	itertoolsÚchainÚLIBTIFF_COREr�  rd   rl   r»   rÚ   rÔ   rQ   ÚsortÚ_getencoderr«  rZ  r®  r[  r	   Ú_saverñ  )2r„  r4  ru  rÜ  rM   rÙ  rã  ÚbitsÚextrar±  r°   rO  ró  rô  r³  r¦  rÙ   r¡  r¢  Úiccr¼   r´  Zinverted_imÚpxrÞ  rÝ  ÚlutÚcolormapÚcolorsrG  râ  Zim_strip_sizeZrows_per_stripZstrip_byte_countsZstrips_per_imagerÅ   rf   Z	blocklistrî  rx  ÚtypesZattsZ
legacy_ifdZsupplied_tagsrÚ   rn  r  ÚerrcoderÆ   rM  r%   r%   r)   r  %  s¨    







úö






*
&""



ÿ
ÿþ
 


û	






ÿ
r  c                   @   sÖ   e Zd Zg d¢Zh d£Zd1dd„Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zejfdd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd2d.d/„Zd0S )3ÚAppendingTiffWriter)r   r   r   r   r    r$   r   r   r   r    r$   r    r$   r    r   r    r$   >   i   r   i  i  i	  r   Fc                 C   st   t |dƒr|| _d| _nD|| _d| _zt||r2dndƒ| _W n tyZ   t|dƒ| _Y n0 | j ¡ | _|  ¡  d S )Nr2  FTzw+bzr+b)	r›   rk   Úclose_fpr¼   Úopenr3  r?  Ú	beginningÚsetup)re   Úfnr‚  r%   r%   r)   rg   h  s    
zAppendingTiffWriter.__init__c                 C   sŒ   | j  | jtj¡ d | _d| _| j  d¡ | _}|s>d| _	d S d| _	|dkrX|  
d¡ n |dkrl|  
d¡ nd	}t|ƒ‚|  ¡  |  ¡  d S )
Nr   r    TFrI   rŸ   rH   rž   zInvalid TIFF file header)rk   rE  r"  r
  ÚSEEK_SETÚwhereToWriteNewIFDOffsetÚoffsetOfNewPager2  ÚIIMMÚisFirstÚ	setEndianÚRuntimeErrorÚskipIFDsÚgoToEnd)re   Úiimmr°   r%   r%   r)   r#  v  s     zAppendingTiffWriter.setupc                 C   s„   | j r
d S | j | j¡ | j d¡}|s,d S || jkrBd}t|ƒ‚|  ¡ }|| j7 }| j | j¡ |  	|¡ | j |¡ |  
¡  d S )Nr    z1IIMM of new page doesn't match IIMM of first page)r)  rk   rE  r'  r2  r(  r+  ÚreadLongr&  Ú	writeLongÚfixIFD)re   r.  r°   Ú
ifd_offsetr%   r%   r)   Úfinalize�  s    


zAppendingTiffWriter.finalizec                 C   s   |   ¡  |  ¡  d S rX   )r3  r#  rh   r%   r%   r)   ÚnewFrame¨  s    zAppendingTiffWriter.newFramec                 C   s   | S rX   r%   rh   r%   r%   r)   Ú	__enter__­  s    zAppendingTiffWriter.__enter__c                 C   s   | j r|  ¡  dS )NF)r   r®  )re   Úexc_typeÚ	exc_valueÚ	tracebackr%   r%   r)   Ú__exit__°  s    zAppendingTiffWriter.__exit__c                 C   s   | j  ¡ | j S rX   )rk   r?  r'  rh   r%   r%   r)   r?  µ  s    zAppendingTiffWriter.tellc                 C   s*   |t jkr|| j7 }| j ||¡ |  ¡ S rX   )r
  r%  r'  rk   rE  r?  )re   rM  Úwhencer%   r%   r)   rE  ¸  s    

zAppendingTiffWriter.seekc                 C   s^   | j  dtj¡ | j  ¡ }d|d  }d|  k r:dk rNn n| j  t|ƒ¡ | j  ¡ | _d S )Nr   r1   )rk   rE  r
  ÚSEEK_ENDr?  rZ  rÄ   r'  )re   ÚposZ	pad_bytesr%   r%   r)   r-  ¿  s    
zAppendingTiffWriter.goToEndc                 C   s.   || _ | j d | _| j d | _| j d | _d S )Nr.   r
  ZHHL)ÚendianÚlongFmtÚshortFmtÚ	tagFormat)re   r=  r%   r%   r)   r*  É  s    zAppendingTiffWriter.setEndianc                 C   sP   |   ¡ }|dkr"| j ¡ d | _qL| j |¡ |  ¡ }| j |d tj¡ q d S )Nr   r    r/   )r/  rk   r?  r&  rE  Ú	readShortr
  ÚSEEK_CUR)re   r2  Únum_tagsr%   r%   r)   r,  Ï  s    zAppendingTiffWriter.skipIFDsc                 C   s   | j  |¡S rX   )rk   rZ  r  r%   r%   r)   rZ  Ú  s    zAppendingTiffWriter.writec                 C   s   t  | j| j d¡¡\}|S )Nr   )rñ   rò   r?  rk   r2  r  r%   r%   r)   rA  Ý  s    zAppendingTiffWriter.readShortc                 C   s   t  | j| j d¡¡\}|S rJ   )rñ   rò   r>  rk   r2  r  r%   r%   r)   r/  á  s    zAppendingTiffWriter.readLongc                 C   sN   | j  dtj¡ | j  t | j|¡¡}|d urJ|dkrJd|› d�}t|ƒ‚d S )Néþÿÿÿr    úwrote only ú bytes but wanted 4©	rk   rE  r
  rB  rZ  rñ   rô   r>  r+  ©re   rf   Zbytes_writtenr°   r%   r%   r)   ÚrewriteLastShortToLongå  s
    z*AppendingTiffWriter.rewriteLastShortToLongc                 C   sN   | j  dtj¡ | j  t | j|¡¡}|d urJ|dkrJd|› d�}t|ƒ‚d S )NrD  r   rE  ú bytes but wanted 2)	rk   rE  r
  rB  rZ  rñ   rô   r?  r+  rH  r%   r%   r)   ÚrewriteLastShortì  s
    z$AppendingTiffWriter.rewriteLastShortc                 C   sN   | j  dtj¡ | j  t | j|¡¡}|d urJ|dkrJd|› d�}t|ƒ‚d S )Néüÿÿÿr    rE  rF  rG  rH  r%   r%   r)   ÚrewriteLastLongó  s
    z#AppendingTiffWriter.rewriteLastLongc                 C   s>   | j  t | j|¡¡}|d ur:|dkr:d|› d�}t|ƒ‚d S )Nr   rE  rJ  )rk   rZ  rñ   rô   r?  r+  rH  r%   r%   r)   Ú
writeShortú  s    zAppendingTiffWriter.writeShortc                 C   s>   | j  t | j|¡¡}|d ur:|dkr:d|› d�}t|ƒ‚d S )Nr    rE  rF  )rk   rZ  rñ   rô   r>  r+  rH  r%   r%   r)   r0     s    zAppendingTiffWriter.writeLongc                 C   s   |   ¡  | j ¡  d S rX   )r3  rk   r®  rh   r%   r%   r)   r®    s    zAppendingTiffWriter.closec                 C   s   |   ¡ }t|ƒD ]ê}t | j| j d¡¡\}}}| j| }|| }|dk}|sj|  ¡ }	|	| j	7 }	|  
|	¡ || jv ræ| j ¡ }
|r¬| j||dk|dkd� | j |
d ¡ n0| j |	¡ | j||dk|dkd� | j |
¡ d  }	}
q|r| j dtj¡ qd S )Nr$   r    r   )ÚisShortÚisLong)rA  r@  rñ   rò   r@  rk   r2  Ú
fieldSizesr/  r'  rM  ÚTagsr?  Ú
fixOffsetsrE  r
  rB  )re   rC  rG  rÅ   Ú
field_typerH  Z
field_sizeZ
total_sizeZis_localrM  Zcur_posr%   r%   r)   r1  
  s2    




ÿÿ
zAppendingTiffWriter.fixIFDc                 C   s¶   |s|sd}t |ƒ‚t|ƒD ]”}|r,|  ¡ n|  ¡ }|| j7 }|r–|dkr–|dkr^d}t |ƒ‚|  |¡ | j dtj	¡ |  
tj¡ | j dtj	¡ q|r¦|  |¡ q|  |¡ qd S )Nz offset is neither short nor longr   r   znot implementediöÿÿÿr$   )r+  r@  rA  r/  r'  rI  rk   rE  r
  rB  rN  r   rá   rK  rM  )re   rH  rO  rP  r°   rG  rM  r%   r%   r)   rS  -  s"    

zAppendingTiffWriter.fixOffsetsN)F)FF)r•   r–   r—   rQ  rR  rg   r#  r3  r4  r5  r9  r?  r  r%  rE  r-  r*  r,  rZ  rA  r/  rI  rK  rM  rN  r0  r®  r1  rS  r%   r%   r%   r)   r  K  s0   

#r  c              	   C   sð   | j  ¡ }| j}t| dg ¡ƒ}t| dƒs:|s:t| ||ƒS |  ¡ }zœt|ƒ�v}| g| D ]Z}||_ ||_t|dƒsxd}	n|j	}	t
|	ƒD ]*}
| |
¡ | ¡  t|||ƒ | ¡  q†qXW d   ƒ n1 sÈ0    Y  W |  |¡ n|  |¡ 0 d S )NÚappend_imagesr~  r   )ró  rþ  rô  r]  rA  r›   r  r?  r  r~  r@  rE  rN  r4  )r„  r4  ru  ró  rô  rU  Zcur_idxÚtfÚimsÚnfrrü   r%   r%   r)   Ú	_save_allG  s(    



,rY  z.tifz.tiffz
image/tiff)lr  r  Úloggingr�  r
  rñ   rè   Úcollections.abcr   Ú	fractionsr   Únumbersr   r   Ú r   r   r	   r
   r   r   Ú_binaryr   r�  r   r’  r   r   Ú	getLoggerr•   rC  rÐ  rõ  ZIFD_LEGACY_APIr  r§   r¥   rÂ  rÃ  rÆ  r¼  r¿  rÀ  rù  rQ  rÈ  rÒ  r  rÍ  rÎ  r¾  rÏ  r  rú  rû  rü  Z	PREDICTORr×  rÓ  rÔ  rÑ  r  r  rÇ  rÅ  Z
JPEGTABLESrÁ  r  rý  r÷  rø  rÖ  ZEXIFIFDrŠ  r	  ZIMAGEJ_META_DATA_BYTE_COUNTSZIMAGEJ_META_DATAr»  r¾   r  rË  r\   rÉ  rK   rN   rW   r^   rÂ   rÿ   rQ   rœ   rü   r¼   rÓ   Úsetattrrc  ZImageFileDirectoryrs  rò  r  r  rY  Úregister_openrã  Úregister_saveÚregister_save_allÚregister_extensionsÚregister_mimer%   r%   r%   r)   Ú<module>)   s    
î‡|
     \   fë  ( }