Warning: session_start(): Session cannot be started after headers have already been sent in /home/tvrreohg/public_html/manga.php on line 13
3 iaJãã@s( ddlZddlZddlZddlZddlZddlZddlmZddlm Z ddl m Z m Z ddl mZmZmZmZmZddlmZddlmZejeƒZd Zd Zd Zd Zd Zd ZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0d Z1d!Z2d"Z3d#Z4d$Z5d%Z6d&Z7d'Z8d(Z9d)Z:d*Z;d+Zd.Z?d/Z@d0ZAd1ZBd2ZCd3d4d5d6d7d8d9d:d;dd?d@dAdBdCdDœZDdEdF„eDjEƒDƒZFedd°dd±ffd²edd³dd´ffdµedd¶dId·ffd¸edd¹dIdºffd»edd¼dd½ffd¾edd¿ddÀffdÁeddÂdIdÃffdÄeddÅdIdÆffdÇeddÈddÉffdÊeddËddÌffdÍeddÎdIdÏffdÐeddÑdIdÒffdÓeddÔddÕffdÖedd×ddØffdÙeddÚdIdÛffdÜeddÝdIdÞffdßeddàddáffdâeddãddäffdåeddædIdçffdèeddédIdêffdëeddìddíffdîeddïddðffdñeddòdIdóffdôeddõdIdöffd÷eddøddùffdúeddûddüffdýeddþdIdÿff�ded�ddI�dff�ded�dd�dff�ded�dd�dff�d ed�d dI�d ff�d ed�d dI�dff�ded�dd�dff�ded�dd�dff�ded�dd�dff�ded�dd�dff�ded�dd�dff�ded�dd�d ff�d!ed�d"d�d#ff�d$ed�d%d�d&ff�d'ed�d(d�d)ff�d*ed�d+d�d,ff�d-ed�d.d�d/ff�d0ed�d1d�d2ff�d3ed�d4d�d5�d6f�d7ed�d8d�d9�d:f�d;edI�dedI�d?d�d@ff�dAedI�dBdI�dCff�dDedI�dEdI�dFff�dGedI�dHd�dIff�dJedI�dKd�dLff�dMedI�dNd�dO�dPf�dQedI�dRd�dS�dTf�dUedI�dVd�dW�dXf�dYedI�dZd�d[�d\f�d]edI�d^d�d_�d`f�daedI�dbd�dc�ddf�deedI�dfd�dg�dhf�diedI�djd�dk�dlf�dmedI�dnd�do�dpf�dqedI�drd�ds�dtf�duedI�dvd�dw�dxf�dyedI�dzd�d{�d|f�d}edI�d~d�d�d€f�d�edI�d‚d�dƒ�d„f�d…edI�d†d�d‡�dˆf�d‰edI�dŠd�d‹�dŒf�d�edI�dŽd�d��d�f�d‘edI�d’d�d“�d”f�d•edI�d–d�d—�d˜f�d™edI�dšd�d›�dœf�d�edI�džd�dŸff�d edI�d¡d�d¢ff�d£edI�d¤d�d¥ff�d¦edI�d§d�d¨ff�d©edI�dªd�d«�d¬f�d­edI�d®d�d¯�d°f�d±edI�d²d�d³�d´f�dµedI�d¶d�d·�d¸f�d¹edI�dºd�d»�d¼f�d½edI�d¾d�d¿�dÀf�dÁedb�dÂd�dÃff�dÄedb�dÅd�dÆff�dÇedb�dÈdI�dÉff�dÊedb�dËdI�dÌff�dÍedb�dÎd�dÏff�dÐedb�dÑd�dÒff�dÓedb�dÔdI�dÕff�dÖedb�d×dI�dØff�dÙedb�dÚd�dÛff�dÜedb�dÝd�dÞff�dßedb�dàdI�dáff�dâedb�dãdI�däff�dåedb�dæd�dçff�dèedb�déd�dêff�dëedb�dìd�dí�dîf�dïedb�dðd�dñ�dòf�dóedb�dôdI�dõff�döedb�d÷dI�døff�dùedˆ�dúd�dûff�düedˆ�dýd�dþff�dÿedˆ�dd�d�df�dedˆ�dd�d�df�dedˆ�dd�d �d f�d edˆ�d d�d �df�dedˆ�dd�dff�ded��dd�dff�ded��dd�dff�dedV�dd�dff�dedV�dd�dff�dioZGd�d�d‘d’gZHd“d”„ZId•d–„ZJd—d˜„ZKiZLiZMGd™dš„dše ƒZNGd›dœ„dœeƒZOeLeO_LeMeO_MxNejEƒD]B\ZPZQeQjRd�džƒZQeSeOdŸeQeLePdƒeSeOd eQeMePƒ� qW[L[M[P[QGd¡d¢„d¢eOƒZTeTZUGd£d¤„d¤ejƒZVdGedd�ddfdLedd�d dfdjedd�d!dIfdedbd�d"dfd†edbd�d#dIfdheddI�d$dfd[edd�d%dfd`eddI�d&dfdeeddb�d'dfdkedId�d(dfdnedId�d)dfdmedId�d*dIfd‰edˆd�d+dfd¥ed�d�d,dfdŽedVd�d-dfdieddI�d.dfd^edd�d/dfdaeddI�d0dfdfeddb�d1dfd¦œZWd§d¨„ZXGd©dª„dªƒZYd«d¬„ZZej[eVj\eVeIƒej]eVj\eXƒej^eVj\eZƒej_eVj\d­d®gƒej`eVj\d¯ƒdS(2éN)ÚMutableMapping)ÚFraction)ÚNumberÚRationalé)ÚImageÚ ImageFileÚImageOpsÚ ImagePaletteÚTiffTags)Úo8)ÚTYPESFTisIIsMMéiiiii iiiiiiiii(i-i1i2i;i=i@iDiJiRiSi[iii˜‚i»ƒiI†is‡ii‡i¼ii–Æi—ÆÚrawZ tiff_ccittZgroup3Zgroup4Ztiff_lzwÚ tiff_jpegÚjpegÚtiff_adobe_deflateZ tiff_raw_16ZpackbitsZtiff_thunderscanÚ tiff_deflateZ tiff_sgilogZ tiff_sgilog24ÚlzmaZzstdÚwebp)réééééééi€i€i)€i²€it‡iu‡imˆiPÃiQÃcCsi|]\}}||“qS©r)Ú.0ÚkÚvrrú4/tmp/tmp5hum_rxs/lib64/python/PIL/TiffImagePlugin.pyú „sr"Ú1ú1;Irú1;IRú1;RÚLúL;2IúL;2IRúL;2úL;2RrúL;4IúL;4IRúL;4úL;4RrúL;IúL;IRúL;Ré úI;16úI;12éúI;16BÚIúI;16SúI;16BSré ÚFúF;32FúF;32BFúI;32NúI;32SúI;32BSÚLAÚRGBúRGB;RÚRGBAÚRGBXÚRGBXXÚRGBXXXÚRGBaÚRGBaXÚRGBaXXÚRGBAXÚRGBAXXéçúRGB;16LúRGB;16BúRGBA;16LúRGBA;16BúRGBX;16LúRGBX;16BúRGBa;16LúRGBa;16BÚPúP;1úP;1RúP;2úP;2RúP;4úP;4RÚPAúP;RrÚCMYKÚCMYKXÚCMYKXXúCMYK;16LrÚLABsMM*sII*sMM*sII*cCs|dd…tkS)Nr)ÚPREFIXES)Úprefixrrr!Ú_acceptsrgcCs<t|ƒdk}t|rd|n|ƒj|ƒ}|r8|ddd…S|S)Nréÿÿÿÿ)ÚabsÚ IFDRationalÚlimit_rational)ÚvalÚmax_valÚinvÚn_drrr!Ú_limit_rationals rpcCsPt|ƒ}|j|jf}t|ƒ|kr.t|t|ƒƒ}t|ƒ|krLt|Ž}t||ƒ}|S)N)rÚ numeratorÚ denominatorÚminrpriÚmax)rlrmZmin_valÚfracrorrr!Ú_limit_signed_rationals    rvc@s>eZdZdZd5Zd6dd„Zedd „ƒZed d „ƒZd d „Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„ZedƒZedƒZedƒZedƒZedƒZedƒZed ƒZed!ƒZed"ƒZed#ƒZed$ƒZed%ƒZed&ƒZed'ƒZed(ƒZed)ƒZed*ƒZ ed+ƒZ!ed,ƒZ"ed-ƒZ#ed.ƒZ$ed/ƒZ%ed0ƒZ&ed1ƒZ'ed2ƒZ(ed3ƒZ)d4S)7rjzÀ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Ú_valrcCs†t|tƒr&|j|_|j|_|j|_dSt|tƒrB|j|_|j|_n ||_||_|dkrbtdƒ|_n |dkrvt|ƒ|_n t||ƒ|_dS)z® :param value: either an integer numerator, a float/rational/other number, or an IFDRational :param denominator: Optional integer denominator NrÚnanr) Ú isinstancerjrqrwrrrxryrÚfloat)ÚselfÚvaluerrrrr!Ú__init__1s     zIFDRational.__init__cCs|jS)N)rw)Úarrr!rqKszIFDRational.numeratorcCs|jS)N)rx)r€rrr!rrOszIFDRational.denominatorcCs.|jdkr|j|jfS|jj|ƒ}|j|jfS)z… :param max_denominator: Integer, the maximum denominator value :returns: Tuple of (numerator, denominator) r)rrrqryZlimit_denominator)r}Zmax_denominatorÚfrrr!rkSs   zIFDRational.limit_rationalcCstt|jƒƒS)N)Ústrr|ry)r}rrr!Ú__repr__`szIFDRational.__repr__cCs |jjƒS)N)ryÚ__hash__)r}rrr!r„cszIFDRational.__hash__cCs0|j}t|tƒr|j}t|tƒr(t|ƒ}||kS)N)ryr{rjr|)r}Úotherrlrrr!Ú__eq__fs   zIFDRational.__eq__cCs|j|j|jgS)N)ryrwrx)r}rrr!Ú __getstate__nszIFDRational.__getstate__cCs,tj|dƒ|\}}}||_||_||_dS)Nr)rjrryrwrx)r}Ústateryrwrxrrr!Ú __setstate__qs   zIFDRational.__setstate__cs‡fdd„}|S)Ncst|jˆƒ|ŽS)N)Úgetattrry)r}Úargs)Úoprr!Údelegateysz'IFDRational._delegate..delegater)rŒr�r)rŒr!Ú _delegatexs zIFDRational._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__N)rwrxry)r)*Ú__name__Ú __module__Ú __qualname__Ú__doc__Ú __slots__rÚpropertyrqrrrkrƒ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¢r£r¤r¥r¦r§r¨rrrr!rj#sL    rjc @søeZdZdZd\dd„Zedd„ƒZedd„ƒZed d„ƒZej d d „ƒZd d „Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zeeeejd*d+fejd,d-fejd.d/fejd0d1fej d2d3fej!d4d5fej"d6d7fej#d,d-fgƒƒed8d8ƒd]d:d;„ƒZ$ed8ƒdd8ƒd^d?d@„ƒZ&ed>ƒdAdB„ƒZ'edCdDƒd_dEdF„ƒZ(edCƒdGdH„ƒZ)edId8ƒd`dJdK„ƒZ*edIƒdLdM„ƒZ+edNdDƒdadOdP„ƒZ,edNƒdQdR„ƒZ-dSdT„Z.dUdV„Z/dbdXdY„Z0dZd[„Z1dS)cÚImageFileDirectory_v2aThis 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*NcCs |dd…tkr$tdt|ƒ›d�ƒ‚|dk r0|n |dd…|_|jtkrPd|_n|jtkrbd|_ntdƒ‚||_i|_|j ƒ|j d |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. Nrznot a TIFF file (header z not valid)rú>úúszImageFileDirectory_v2.cCs|jS)N)Ú_offset)r}rrr!rÀûscCs|jS)N)r¾)r}rrr!rÀüscCs tdƒ‚dS)Nz"Not allowing setting of legacy api)Ú Exception)r}r~rrr!Ú legacy_apiþsz ImageFileDirectory_v2.legacy_apicCs(i|_i|_i|_i|_d|_d|_dS)N)Ú_tags_v1Ú_tags_v2Ú_tagdatarºZ_nextrÁ)r}rrr!r»s zImageFileDirectory_v2.resetcCs tt|ƒƒS)N)r‚Údict)r}rrr!Ú__str__ szImageFileDirectory_v2.__str__cs‡fdd„ˆjƒDƒS)z� :returns: dict of name|key: value Returns the complete tag dictionary, with named tags where possible. cs"i|]\}}|tj|ˆjƒj“qSr)r Úlookupr¹Úname)rÚcoder~)r}rr!r"sz/ImageFileDirectory_v2.named..)Úitems)r}r)r}r!Únamed s zImageFileDirectory_v2.namedcCstt|jƒt|jƒBƒS)N)ÚlenÚsetrÆrÅ)r}rrr!Ú__len__szImageFileDirectory_v2.__len__cCsh||jkr>|j|}|j|}|j|\}}||||jƒ||<|j|}|jrdt|ttfƒ rd|f}|S)N)rÅrÆrºÚ_load_dispatchrÃr{ÚtupleÚbytes)r}ÚtagÚdataÚtypÚsizeÚhandlerrlrrr!Ú __getitem__s    z!ImageFileDirectory_v2.__getitem__cCs||jkp||jkS)N)rÅrÆ)r}rÔrrr!Ú __contains__&sz"ImageFileDirectory_v2.__contains__cCs|j|||jƒdS)N)Ú_setitemrÃ)r}rÔr~rrr!Ú __setitem__)sz!ImageFileDirectory_v2.__setitem__c sÄtttf}tj||jƒ‰t||ƒr(|gn|}||jk�rpˆjrNˆj|j|<�n"tj |j|<t dd„|Dƒƒr’t dd„|Dƒƒr„tj ntj |j|<nÞt dd„|Dƒƒ�r t dd„|DƒƒrÆtj |j|<nDt dd„|Dƒƒrætj|j|<n$t dd„|Dƒƒrþtjntj|j|<ndt dd„|Dƒƒ�r.tj|j|<nBt d d„|Dƒƒ�rPtj|j|<n t d d„|Dƒƒ�rptj|j|<|j|tj k�r’d d „|Dƒ}n |j|tj k�r²d d „|Dƒ}|j|tjk�oÌt|tƒ}|�sêt‡fdd„|Dƒƒ}|�rö|jn|j}| �r¸ˆjdk�sD|j|tjk�sDˆjdk�r¸t|ƒdk�r¸| �r¸|�rh|j|tj tj gk�rh|f}y|\||<Wn>tk �r´tjd|›dt|ƒ›d�ƒ|d||<YnXn|||<dS)Ncss|]}t|tƒVqdS)N)r{rj)rr rrr!ú 7sz1ImageFileDirectory_v2._setitem..css|]}|dkVqdS)rNr)rr rrr!rÝ:scss|]}t|tƒVqdS)N)r{Úint)rr rrr!rÝ=scss&|]}d|kodknVqdS)rrr6Nir)rr rrr!rÝ>scss&|]}d|kodknVqdS)réNi€i€ÿÿi€r)rr rrr!rÝ@scss|]}|dkVqdS)rNr)rr rrr!rÝEscss|]}t|tƒVqdS)N)r{r|)rr rrr!rÝHscss|]}t|tƒVqdS)N)r{r‚)rr rrr!rÝJscss|]}t|tƒVqdS)N)r{rÓ)rr rrr!rÝLscSs&g|]}t|tƒr|jddƒn|‘qS)ÚasciiÚreplace)r{r‚Úencode)rr rrr!ú Qsz2ImageFileDirectory_v2._setitem..cSs"g|]}t|tƒrt|ƒn|‘qSr)r{rÞr|)rr rrr!rãUsc3s|]}ˆj|ƒVqdS)N)Zcvt_enum)rr~)Úinforr!rÝYsrzMetadata Warning, tag z had too many entries: z , expected 1r)rrÓr‚r rÉr¹r{rºÚtypeÚ UNDEFINEDÚallZRATIONALZSIGNED_RATIONALÚSHORTÚ SIGNED_SHORTÚLONGÚ SIGNED_LONGÚDOUBLEÚASCIIÚBYTErÇrÒrÄrÅÚlengthrÎÚ ValueErrorÚwarningsÚwarn)r}rÔr~rÃZ basetypesÚvaluesÚis_ifdÚdestr)rär!rÛ,s^      " zImageFileDirectory_v2._setitemcCs.|jj|dƒ|jj|dƒ|jj|dƒdS)N)rÅÚpoprÄrÆ)r}rÔrrr!Ú __delitem__|sz!ImageFileDirectory_v2.__delitem__cCstt|jƒt|jƒBƒS)N)ÚiterrÏrÆrÅ)r}rrr!Ú__iter__�szImageFileDirectory_v2.__iter__cCstj|j||ƒS)N)ÚstructÚunpackr·)r}ÚfmtrÕrrr!r¼„szImageFileDirectory_v2._unpackcGstj|j|f|žŽS)N)rúÚpackr·)r}rürórrr!Ú_pack‡szImageFileDirectory_v2._packcs‡‡fdd„}|S)NcsBddlm}|jjdƒr2|jdd…jddƒ|ˆ<ˆ|ftˆ<|S)Nr)r Úload_rÚ_ú )r r r©Ú startswithrárÑ)Úfuncr )Úidxr×rr!Ú decorator‹s    z9ImageFileDirectory_v2._register_loader..decoratorr)rr×rr)rr×r!Ú_register_loaderŠsz&ImageFileDirectory_v2._register_loadercs‡fdd„}|S)Ncs |tˆ<|S)N)Ú_write_dispatch)r)rrr!r–sz9ImageFileDirectory_v2._register_writer..decoratorr)rrr)rr!Ú_register_writer•s z&ImageFileDirectory_v2._register_writercsXddlm}|\}‰}|||<tjdˆƒ‰ˆd‡‡fdd„ ft|<‡fdd„t|<dS) Nr)r ú=Tcs|jdjt|ƒˆˆƒ|ƒS)Nz{}{})r¼ÚformatrÎ)r}rÕrÃ)rür×rr!rÀ¤sz7ImageFileDirectory_v2._register_basic..csdj‡‡fdd„|DƒƒS)Nóc3s|]}ˆjˆ|ƒVqdS)N)rþ)rr~)rür}rr!rÝ©szJImageFileDirectory_v2._register_basic....)Újoin)r}ró)rü)r}r!rÀ¨s)T)r r rúÚcalcsizerÑr)Z idx_fmt_namer rrÊr)rür×r!Ú_register_basicœs  z%ImageFileDirectory_v2._register_basicÚHÚshortr'ÚlongÚbz signed byteÚhz signed shortÚlz signed longr�r|ÚdZdoublerTcCs|S)Nr)r}rÕrÃrrr!Ú load_byte¼szImageFileDirectory_v2.load_bytecCs|S)Nr)r}rÕrrr!Ú write_byteÀsz ImageFileDirectory_v2.write_bytercCs"|jdƒr|dd…}|jddƒS)Nórzlatin-1rárh)ÚendswithÚdecode)r}rÕrÃrrr!Ú load_stringÄs  z!ImageFileDirectory_v2.load_stringcCsd|jddƒdS)Nr ràrár)râ)r}r~rrr!Ú write_stringÊsz"ImageFileDirectory_v2.write_stringrrcsV|jdjt|ƒdƒ|ƒ}‡fdd„‰t‡fdd„t|ddd…|ddd…ƒDƒƒS) Nz{}Lrcsˆr ||fSt||ƒS)N)rj)r€r)rÃrr!ÚcombineÓsz4ImageFileDirectory_v2.load_rational..combinec3s|]\}}ˆ||ƒVqdS)Nr)rÚnumÚdenom)rrr!rÝÖsz6ImageFileDirectory_v2.load_rational..rr)r¼r rÎrÒÚzip)r}rÕrÃÚvalsr)rrÃr!Ú load_rationalÏs z#ImageFileDirectory_v2.load_rationalcsdj‡fdd„|DƒƒS)Nr c3s"|]}ˆjdt|dƒžŽVqdS)Ú2Lrr;rN)r#llÿÿ)rþrp)rru)r}rr!rÝÛsz7ImageFileDirectory_v2.write_rational..)r )r}rór)r}r!Úwrite_rationalØsz$ImageFileDirectory_v2.write_rationalrcCs|S)Nr)r}rÕrÃrrr!Úload_undefinedÞsz$ImageFileDirectory_v2.load_undefinedcCs|S)Nr)r}r~rrr!Úwrite_undefinedâsz%ImageFileDirectory_v2.write_undefinedé csV|jdjt|ƒdƒ|ƒ}‡fdd„‰t‡fdd„t|ddd…|ddd…ƒDƒƒS) Nz{}lrcsˆr ||fSt||ƒS)N)rj)r€r)rÃrr!rêsz;ImageFileDirectory_v2.load_signed_rational..combinec3s|]\}}ˆ||ƒVqdS)Nr)rrr)rrr!rÝísz=ImageFileDirectory_v2.load_signed_rational..rr)r¼r rÎrÒr )r}rÕrÃr!r)rrÃr!Úload_signed_rationalæs z*ImageFileDirectory_v2.load_signed_rationalcsdj‡fdd„|DƒƒS)Nr c3s$|]}ˆjdt|dd ƒžŽVqdS) Ú2lrérN)r)liÿÿÿli€)rþrv)rru)r}rr!rÝòsz>ImageFileDirectory_v2.write_signed_rational..)r )r}rór)r}r!Úwrite_signed_rationalïs z+ImageFileDirectory_v2.write_signed_rationalcCs4|j|ƒ}t|ƒ|kr0td|›dt|ƒ›d�ƒ‚|S)Nz&Corrupt EXIF data. Expecting to read z bytes but only got z. )ÚreadrÎÚOSError)r}Úfpr×Úretrrr!Ú _ensure_readös   z"ImageFileDirectory_v2._ensure_readcCs|jƒ|jƒ|_�yÐ�x°t|jd|j|dƒƒdƒD�]Ž}|jd|j|dƒƒ\}}}}tj||jƒj }t j |dƒ}d|›d|›d |›d|›d � } y|j |\} } Wn*t k rÎtj| d |›�ƒw6YnX|| } | d k�r.|jƒ} |jd |ƒ\}| d| ›d|›�7} |j|ƒtj|| ƒ}|j| ƒn |d| …}t|ƒ| k�rttjd| ›dt|ƒ›d|›�ƒtj| ƒq6|�s†tj| ƒq6||j|<||j|<| d| dk�r°d| nt|ƒ7} tj| ƒq6W|jd |j|d ƒƒ\|_Wn0tk �r} ztjt| ƒƒdSd} ~ XnXdS)NrrrÚHHL4sr3Úunknownztag: z (z ) - type: ú)z - unsupported type rr'z Tag Location: z - Data Location: z/Possibly corrupt EXIF data. Expecting to read z bytes but only got z. Skipping tag z - value: r;z)r»ÚtellrÁÚranger¼r0r rÉr¹rÊr ÚgetrÑÚKeyErrorÚloggerÚdebugÚseekrZ _safe_readrÎrñròrÆrºr´r½r-r‚)r}r.ÚirÔrÖÚcountrÕÚtagnameÚtypnameÚmsgZ unit_sizerØr×ÚhereÚoffsetrrr!ÚloadÿsN &          zImageFileDirectory_v2.loadrc Cs0|jdt|jƒƒ}g}|t|ƒt|jƒdd}d}�xút|jjƒƒD�]æ\}}|tkrdt|ƒ}|jj|ƒ}tj d|›d|›dt |ƒ›�ƒ|t j ko¢t |tƒ}|rü|jdkr¸d} nd } t| |d �} |j|} x| jƒD]\} } | | | <qÜW| j|ƒ}n*t |tƒ�r |n|f} |j||f| žŽ}t j||jƒj}|�r@d n tj|d ƒ}d |›d|›d|›d|›d� }|dt|ƒdk�rˆdt|ƒnt| ƒ7}tj |ƒ|�rªd}n(|t jt jt jgk�rÊt|ƒ}nt| ƒ}t|ƒdk�rþ|j||||jddƒdfƒqJ|j||||jd|ƒ|fƒ|t|ƒddd7}qJW|dk �rŽ||\}}}}}|�r`tdƒ‚|jd|jd|ƒd|ƒ}|||||f||<x\|D]T\}}}}}tj |›d|›d|›dt |ƒ›dt |ƒ›� ƒ||jd||||ƒ7}�q”W|d7}x6|D].\}}}}}||7}t|ƒd@�rú|d7}�qúW|S)Nrr3rzTag z, Type: z , Value: r²sII*sMM*)r¹Úifdr2zsave: z (z ) - type: r3z - value: r6zrrr r'rz&multistrip support not yet implementedrrr1s) rþrÎrÅÚsortedrÌÚ STRIPOFFSETSrºr6r8r9r´r rêr{rÇr·r¯ÚtobytesrÒrrÉr¹rÊr r‚rîríræÚappendÚljustÚNotImplementedErrorr¼)r}rAÚresultÚentriesZ stripoffsetsrÔr~rÖrôr¿rCróZifd_tagZ ifd_valuerÕr=r>r?r<rrr!rF6sf       &   .zImageFileDirectory_v2.tobytescCsN|jƒdkr&|j|j|jdddƒƒ|jƒ}|j|ƒ}|j|ƒ|t|ƒS)NrZHLé*r)r4ÚwriterµrþrFrÎ)r}r.rArJrrr!Úsave‚s    zImageFileDirectory_v2.save)r°NN)T)T)T)T)T)r)2r©rªr«r¬rr®rfrArÃÚsetterr»rÈrÍrÐrÙrÚrÜrÛr÷rùr¼rþrrrÚlistÚmapr rèrêZ SIGNED_BYTErérëÚFLOATrìZIFDrrrrr"r$r%r&r(r+r0rBrFrNrrrr!r¯¢sf;      P              7 Lr¯rrrÿZwrite_cszeZdZUdZ‡fdd„Zedd„ƒZedd„ƒZe e dd„ƒZ d d „Z d d „Z d d„Zdd„Zdd„Zdd„Z‡ZS)Ú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 cstƒj||Žd|_dS)NT)Úsuperrr¾)r}r‹Úkwargs)Ú __class__rr!r«szImageFileDirectory_v1.__init__cCs|jS)N)rÄ)r}rrr!rÀ¯szImageFileDirectory_v1.cCs|jS)N)rÆ)r}rrr!rÀ°scCs(||jd�}|j|_|j|_|j|_|S)a2Returns 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` )rf)rfrÆrºr½)ÚclsÚoriginalrCrrr!Úfrom_v2¶s zImageFileDirectory_v1.from_v2cCs4t|jd�}t|jƒ|_t|jƒ|_t|jƒ|_|S)a2Returns 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` )rf)r¯rfrÇrÆrºrÅ)r}rCrrr!Úto_v2Ès    zImageFileDirectory_v1.to_v2cCs||jkp||jkS)N)rÄrÆ)r}rÔrrr!rÚÙsz"ImageFileDirectory_v1.__contains__cCstt|jƒt|jƒBƒS)N)rÎrÏrÆrÄ)r}rrr!rÐÜszImageFileDirectory_v1.__len__cCstt|jƒt|jƒBƒS)N)rørÏrÆrÄ)r}rrr!rùßszImageFileDirectory_v1.__iter__cCs xdD]}|j|||ƒqWdS)NFT)FT)rÛ)r}rÔr~rÃrrr!rÜâs z!ImageFileDirectory_v1.__setitem__cCsr||jkrP|j|}|j|}|j|\}}x"dD]}|j|||||ƒ|ƒq2W|j|}t|ttfƒsn|f}|S)NFT)FT)rÄrÆrºrÑrÛr{rÒrÓ)r}rÔrÕrÖr×rØÚlegacyrlrrr!rÙæs     z!ImageFileDirectory_v1.__getitem__)r©rªr«r¬rr®ÚtagsZtagdatarÇrºÚ classmethodrYrZrÚrÐrùrÜrÙÚ __classcell__rr)rVr!rS˜s     rScsŠeZdZdZdZdZd‡fdd„ Zdd„Zed d „ƒZ d d „Z d d„Z dd„Z dd„Z ‡fdd„Zdd„Zdd„Zdd„Zdd„Z‡ZS)Ú TiffImageFileZTIFFz Adobe TIFFFNcsd|_d|_tƒj||ƒdS)N)Útag_v2rÔrTr)r}r.Úfilename)rVrr!rszTiffImageFile.__init__cCs„|jjdƒ}t|ƒ|_d|_|jj|_|_d|_|j|_ g|_ d|_ t j dƒt j d|j›�ƒt j dt|ƒ›�ƒ|jdƒdS) z#Open the first image in a TIFF filerNrz*** TiffImageFile._open ***z - __first: z- ifh: rrh)r.r,r¯r`rCr½Z_TiffImageFile__firstÚ_TiffImageFile__nextÚ_TiffImageFile__frameÚ_TiffImageFile__fpÚ _frame_posÚ _n_framesr8r9r´Ú_seek)r}r¿rrr!Ú_open s   zTiffImageFile._opencCsT|jdkrN|jƒ}|jt|jƒƒx |jdkrB|j|jƒdƒq$W|j|ƒ|jS)Nr)rfr4rgrÎrer:)r}Úcurrentrrr!Ún_frames#s   zTiffImageFile.n_framescCs<|j|ƒsdS|j|ƒtj|jƒtjj|j|jƒ|_dS)z%Select a given frame as current imageN) Z _seek_checkrgrZ_decompression_bomb_checkr×ÚcoreÚnewÚmodeÚim)r}Úframerrr!r:-s    zTiffImageFile.seekc Cs@|j|_|jjƒxæt|jƒ|krø|js0tdƒ‚tjd|›d|j ›d|j›d|jjƒ›�ƒ|jj |jƒ|jj |jƒtjd|jjƒƒ|j j |jƒ|j j|jkr°d|_n |j j|_|jdkrÎ|d|_t|jƒdkrè|jdk|_|j d7_ qW|jj |j|ƒ|j j |jƒtj|j ƒ|_|_||_ |jƒdS) Nzno more images in TIFF filezSeeking to frame z , on frame z , __next z , location: zLoading tags, location: %srr)rdr.r4rÎrerbÚEOFErrorr8r9rcr:rGr`rBr½rfÚ is_animatedrSrYrÔrCÚ_setup)r}rorrr!rg8s0 (    zTiffImageFile._seekcCs|jS)zReturn the current frame number)rc)r}rrr!r4\szTiffImageFile.tellcCsd|jkr|j|jdƒSiS)z˜ Returns a dictionary containing the XMP tags. Requires defusedxml to be installed. :returns: XMP tags in a dictionary. i¼)r`Z_getxmp)r}rrr!Úgetxmp`szTiffImageFile.getxmpcs|jr|jr|jƒStƒjƒS)N)ÚtileÚuse_load_libtiffÚ _load_libtiffrTrB)r})rVrr!rBhs zTiffImageFile.loadcCsš|jrPtjtjtjtjtjtjtjdœj |jƒ}|dk rP|j j |ƒ|_ |j j |_ |js–d|_|jjƒ|jƒ}x&tjjƒD]}||krˆqz|j|ƒqzWdS)N)rrrrrrrT)Ú_tile_orientationrZFLIP_LEFT_RIGHTZ ROTATE_180ZFLIP_TOP_BOTTOMZ TRANSPOSEZ ROTATE_270Z TRANSVERSEZ ROTATE_90r6rnZ transposer×Ú_sizerqÚ!_close_exclusive_fp_after_loadingr.r4Zgetexifr ÚTAGS_V2_GROUPSÚkeysÚget_ifd)r}ÚmethodÚexifÚkeyrrr!Úload_endms(   zTiffImageFile.load_endc Csàtjj|ƒ|jƒt|jƒdks*tdƒ‚|jdd}t|jddƒ}y6t|jdƒoft j |jj ƒƒ}t|jdƒr~|jj ƒWntk r˜d}YnX|r¦||d<tj |jd t|ƒ|jƒ}y|j|j|ƒWn,tk rü}ztd ƒ|‚WYd d }~XnX|j�o |j }t|jd ƒ�r.zRGB;Lr i)r)r)r)rrr)rr)r)rWr^)3r`r-ÚCOMPRESSION_INFOr6Ú COMPRESSIONÚ _compressionÚPLANAR_CONFIGURATIONÚ_planar_configurationÚPHOTOMETRIC_INTERPRETATIONÚ FILLORDERr8r9rÔrÞÚ IMAGEWIDTHÚ IMAGELENGTHrxr×Ú SAMPLEFORMATrÎrtrsÚ BITSPERSAMPLEÚ EXTRASAMPLESÚSAMPLESPERPIXELr³rfÚ OPEN_INFOrmr7räÚ X_RESOLUTIONÚ Y_RESOLUTIONÚRESOLUTION_UNITrtÚ READ_LIBTIFFrurárArGrEÚ TILEOFFSETSÚ ROWSPERSTRIPÚsumÚ ICCPROFILEÚCOLORMAPr rr Úpaletterw)r}ÚphotoZ fillorderZxsizeZysizeZ sampleFormatZ bps_tupleZ extra_tupleZ bps_countZsamplesPerPixelrÚrawmoderŒZxresZyresZresunitÚxÚyZlayerr€ZoffsetsrÚwrAÚstrideZ tile_rawmoderªrrr!rrásî    2                                 zTiffImageFile._setupcCsBz4y|j|jkr|jjƒWntk r0YnXWdd|_XdS)N)rdr.rŠÚAttributeError)r}rrr!Ú _close__fp±s   zTiffImageFile._close__fp)NN)r©rªr«r Zformat_descriptionryrrhr®rjr:rgr4rsrBr€rvrrr²r^rr)rVr!r_ûs    $ UQr_ÚYCbCr)r#r'rBrWr^r8zI;16zI;16Sr<rCrFrEr`r³rdzI;32BSzI;16BzI;16BSzF;32BFc-CsNyt|j\}}}}}}Wn6tk rP} ztd|j›d�ƒ| ‚WYdd} ~ XnXt|d�} |j} |j} | jd|jjdƒƒ} | dkrŠd} n| dkr˜d} n | dkr¤d } t p®| dk}t |d d ƒ| t <|j d | t <|j d | t<d | krî| d }n:d| k�r$| d}t|tƒ�r(tjƒ}|j|ƒ|}ni}tjdt|ƒƒt|tƒ�rN|jƒ}xv|D]n}t|tjƒ�r†|tjjƒk�r†|j|ƒ| |<n|j|ƒ| |<y|j|| j|<Wntk �r¾YnX�qTWt|dƒ�rxFt t!t"t#t$t%fD]2}||j&k�rä|j&|| |<|j&j|| j|<�qäW| jd|jjdƒƒ}|�r<|| t'<xdt(dft!dft"dft!dft"dft dft)dft*dft+dft,dfg D] \}}|| k�r~| || |<�q~W| jdƒ}|�rÒd| t <|d | t!<|d | t"<|d?k�rþ|| t-<t.|ƒd k�rþt.|ƒ| t/<|dk �r|| t0<|d k�r"|| t1<t2| k�r6|| t2<n”|jd@k�rÊ| t2d k�rÊ|jdk�rÀ|j3ƒ}|jƒ}xLt4|j5ƒD]>}x6t4|j6ƒD](}|||fdk�r¢d nd|||f<�qˆW�qxW|}n t7j8|ƒ}|jdAk�rú|j9j:d"d#ƒ}t;d$d%„|Dƒƒ| t<<t.|ƒ|j d |d d&d'}|�rl|d k�r0d nt=t>||j d ƒ}| dk�rvt=|d&d'd'|j d ƒ}n |j d }|d k�r„d }|d k�r’d n||}|j d |d |}|| t?<|dBk�rÎtj@| jtA<|f|d ||j d ||d f| tA<t;t4d |||ƒƒ| tB<tCj| d ƒ| tD<|jd)k�r\x*tEdCtFdDijGƒD]\}}| jH||ƒ�qBW|�r d+| k�r¸| d+} t| tIƒ �s–| d k�s–| d,k�ržtJd-ƒ‚| dk�r°tJd.ƒ‚| | tK<tjd/ƒtjd0tL| jGƒƒƒd }!t|d1ƒ�ry|jMd ƒtNjO|jPƒƒ}!WntQjRk �rYnXi}"tFt1tAtBtStTg}#i}$|d |$t-<i}%t|d2ƒ�r\|jUjƒ}%xòtVjW| jGƒt |diƒjGƒ|%jGƒƒD]Ì\}}|tjXk�ròtjYjZ�s¢�q€|| jk�r¾| j||"|<n4t|tIt[t\tfƒ�sØ�q€ntj]|ƒj^}&|&�rò|&|"|<||$k�r€||#k�r€t|t\ƒ�r(|j_d3d4ƒd5|$|<n"t|t`ƒ�rBt[|ƒ|$|<n||$|<�q€Wtjd6tL|$jGƒƒƒ|jdEk�rvd9}t|$jGƒƒ}'|'jaƒ|| |!||'|"f}(tjb|jd:|(| ƒ} | jc|j9dF|j ƒx.| j_dGƒ\})}*}+|!�sâ|jd|+ƒ|*�rÂP�qÂW|*d k�r:td<|*›d=�ƒ‚n.| je|ƒ},tfjg||ddH|j |,||d ffgƒd>| k�rJ| |_hdS)INzcannot write mode z as TIFF)rfr�rrrrrr—rrZtiffinfor~zTiffinfo Keys: %sr`r’Ú descriptionr‘Z x_resolutionZ y_resolutionZresolution_unitZsoftwareÚ date_timeZartistÚ copyrightr�rr#r'éÿrWr^rCzRGB;Lcss|]}|dVqdS)rNr)rr rrr!rÝRsz_save..rrr6r³é€ÚqualityédzInvalid quality settingz5quality setting only supported for 'jpeg' compressionzSaving using libtiff encoderz Items: %sr�rÔràrárzConverted items: %súI;16BúI;16zI;16Nrƒizencoder error z when writing image fileÚ_debug_multipage)r)r#r')rWr^i)rr)rr·r¸r·r¸r·)r»r¼)rri@)rr)iÚ SAVE_INFOrmr7r-r¯Ú encoderinfoÚ encoderconfigr6räÚ WRITE_LIBTIFFrŠr–r×ršr›r{rÓrZExifrBr8r9rPrSrZr rzr{r|rºrÂr…r£r¡r¢ÚIPTC_NAA_CHUNKÚPHOTOSHOP_CHUNKÚXMPr`r¨ÚIMAGEDESCRIPTIONÚSOFTWAREÚ DATE_TIMEÚARTISTÚ COPYRIGHTr�rÎrŸržrœr˜Úcopyr5ÚheightÚwidthr ÚinvertrnZ getpaletterÒr©rsÚ STRIP_SIZEr¦rêÚSTRIPBYTECOUNTSrEÚCOMPRESSION_INFO_REVr”ÚYCBCRSUBSAMPLINGÚREFERENCEBLACKWHITErÌÚ setdefaultrÞrðÚ JPEGQUALITYrDr:r†r‡r�ÚioÚUnsupportedOperationÚTRANSFERFUNCTIONÚSUBIFDrÔÚ itertoolsÚchainZ LIBTIFF_CORErkZlibtiff_support_custom_tagsr|r‚rÉrårârjÚsortZ _getencoderrˆrMrNrÚ_saver½)-rnr.rar¬rfr«r ÚbitsÚextrarŒrCr¿rÀr�rƒrär~rZiccrÊr�Z inverted_imZpxr®r­Zlutr°Zrows_per_stripZstrip_byte_countsZstrips_per_imagerÔr~r¹Ú_fpÚtypesZ blocklistZattsZ legacy_ifdrår\r€rÚsrrArrr!rÜÛsp&                       .  ""      "  "        &             rÜc @sôeZdZdddddddddddddg Zdddd d d hZd:d d„Zdd„Zdd„Zdd„Zdd„Z dd„Z dd„Z e j fdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd;d7d8„Zd9S)<ÚAppendingTiffWriterrrrrrii iDiii Fc Csvt|dƒr||_d|_nF||_d|_yt||r2dndƒ|_Wn tk r\t|dƒ|_YnX|jjƒ|_|jƒdS)Nr,FTzw+bzr+b) r…r�Úclose_fprÊÚopenr-r4Ú beginningÚsetup)r}Úfnrlrrr!rs  zAppendingTiffWriter.__init__cCsˆ|jj|jtjƒd|_d|_|jjdƒ|_}|s>d|_ dSd|_ |dkrX|j dƒn|dkrl|j dƒnt d ƒ‚|j ƒ|j ƒdS) NrrTFsII*r²sMM*r±zInvalid TIFF file header)r�r:rår†ÚSEEK_SETÚwhereToWriteNewIFDOffsetÚoffsetOfNewPager,ÚIIMMÚisFirstÚ setEndianÚ RuntimeErrorÚskipIFDsÚgoToEnd)r}rërrr!ræs  zAppendingTiffWriter.setupcCs€|jr dS|jj|jƒ|jjdƒ}|s,dS||jkr>tdƒ‚|jƒ}||j7}|jj|jƒ|j |ƒ|jj|ƒ|j ƒdS)Nrz1IIMM of new page doesn't match IIMM of first page) rìr�r:rêr,rërîÚreadLongréÚ writeLongÚfixIFD)r}rëÚ IFDoffsetrrr!Úfinalize's     zAppendingTiffWriter.finalizecCs|jƒ|jƒdS)N)rõræ)r}rrr!ÚnewFrame>szAppendingTiffWriter.newFramecCs|S)Nr)r}rrr!Ú __enter__CszAppendingTiffWriter.__enter__cCs|jr|jƒdS)NF)rãrŠ)r}Úexc_typeÚ exc_valueÚ tracebackrrr!Ú__exit__FszAppendingTiffWriter.__exit__cCs|jjƒ|jS)N)r�r4rê)r}rrr!r4KszAppendingTiffWriter.tellcCs*|tjkr||j7}|jj||ƒ|jƒS)N)r†rèrêr�r:r4)r}rAÚwhencerrr!r:Ns  zAppendingTiffWriter.seekcCs^|jjdtjƒ|jjƒ}d|d}d|ko8dknrN|jjt|ƒƒ|jjƒ|_dS)Nrr6)r�r:r†ÚSEEK_ENDr4rMrÓrê)r}ÚposZpadBytesrrr!rðUs   zAppendingTiffWriter.goToEndcCs.||_|jd|_|jd|_|jd|_dS)Nr'rZHHL)ÚendianÚlongFmtÚshortFmtÚ tagFormat)r}rÿrrr!rí_s  zAppendingTiffWriter.setEndiancCsTxN|jƒ}|dkr$|jjƒd|_P|jj|ƒ|jƒ}|jj|dtjƒqWdS)Nrrr3)rñr�r4rér:Ú readShortr†ÚSEEK_CUR)r}rôÚnumTagsrrr!rïes zAppendingTiffWriter.skipIFDscCs |jj|ƒS)N)r�rM)r}rÕrrr!rMpszAppendingTiffWriter.writecCstj|j|jjdƒƒ\}|S)Nr)rúrûrr�r,)r}r~rrr!rsszAppendingTiffWriter.readShortcCstj|j|jjdƒƒ\}|S)Nr)rúrûrr�r,)r}r~rrr!rñwszAppendingTiffWriter.readLongcCsJ|jjdtjƒ|jjtj|j|ƒƒ}|dk rF|dkrFtd|›d�ƒ‚dS)Nrrz wrote only z bytes but wanted 4éþÿÿÿ) r�r:r†rrMrúrýrrî)r}r~Ú bytesWrittenrrr!ÚrewriteLastShortToLong{sz*AppendingTiffWriter.rewriteLastShortToLongcCsJ|jjdtjƒ|jjtj|j|ƒƒ}|dk rF|dkrFtd|›d�ƒ‚dS)Nrz wrote only z bytes but wanted 2r) r�r:r†rrMrúrýrrî)r}r~rrrr!ÚrewriteLastShort�sz$AppendingTiffWriter.rewriteLastShortcCsJ|jjdtjƒ|jjtj|j|ƒƒ}|dk rF|dkrFtd|›d�ƒ‚dS)Nrz wrote only z bytes but wanted 4éüÿÿÿ) r�r:r†rrMrúrýrrî)r}r~rrrr!ÚrewriteLastLong‡sz#AppendingTiffWriter.rewriteLastLongcCs:|jjtj|j|ƒƒ}|dk r6|dkr6td|›d�ƒ‚dS)Nrz wrote only z bytes but wanted 2)r�rMrúrýrrî)r}r~rrrr!Ú writeShort�szAppendingTiffWriter.writeShortcCs:|jjtj|j|ƒƒ}|dk r6|dkr6td|›d�ƒ‚dS)Nrz wrote only z bytes but wanted 4)r�rMrúrýrrî)r}r~rrrr!rò’szAppendingTiffWriter.writeLongcCs|jƒ|jjƒdS)N)rõr�rŠ)r}rrr!rŠ—szAppendingTiffWriter.closec Cs|jƒ}xöt|ƒD]ê}tj|j|jjdƒƒ\}}}|j|}||}|dk}|sl|jƒ} | |j 7} |j | ƒ||j krè|jj ƒ} |r®|j ||dk|dkd�|jj| dƒn0|jj| ƒ|j ||dk|dkd�|jj| ƒd} } q|r|jjdtjƒqWdS)Nrrr)ÚisShortÚisLong)rr5rúrûrr�r,Ú fieldSizesrñrêr ÚTagsr4Ú fixOffsetsr:r†r) r}rr;rÔZ fieldTyper<Z fieldSizeZ totalSizeZisLocalrAZcurPosrrr!ró›s.        zAppendingTiffWriter.fixIFDcCs¶| r| rtdƒ‚xœt|ƒD]�}|r.|jƒn|jƒ}||j7}|r”|dkr”|dkr\tdƒ‚|j|ƒ|jjdtj ƒ|j t j ƒ|jjdtj ƒq|r¤|j |ƒq|j|ƒqWdS)Nz offset is neither short nor longirznot implementedr'riöÿÿÿ)rîr5rrñrêrr�r:r†rr r rêr r )r}r<r rr;rArrr!r¾s      zAppendingTiffWriter.fixOffsetsN)F)FF)r©rªr«rrrrærõrör÷rûr4rÕrèr:rðrírïrMrrñrr r r ròrŠrórrrrr!râèsH    #râc CsÞ|jjƒ}|j}t|jdgƒƒ}t|dƒ r>| r>t|||ƒS|jƒ}z†t|ƒ�t}xl|g|D]^}||_||_t|dƒs~d} n|j } x6t | ƒD]*} |j | ƒ|j ƒt|||ƒ|j ƒqŽWq^WWdQRXWd|j |ƒXdS)NÚ append_imagesrjr)r¿rÊrÀrPr6r…rÜr4rârjr5r:rBrö) rnr.rar¿rÀrZcur_idxZtfZimsZnfrrrrr!Ú _save_allÖs(      rz.tifz.tiffz image/tiff)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)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)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'r-)r)r)r'r-)r)r)r'r.)r)r)r'r.)r)r)r'r/)r)r)r'r/)r)r)r'r0)r)r)r'r0)r)r)r'r1)r)r)r'r1)r)r)r'r')r)r)r'r')r)r)r'r2)r)r)r'r2)r)r3)r4r5)r)r6)r4r4)r)r6)r7r7)r)r6)r8r9)r)r6)r8r:)r)r;)r<r=)r)r;)r<r>)r)r;)r8r?)r)r;)r8r@)r)r;)r8rA)r)r;)r<r=)r)r;)r<r>)r)rr)r)rBrB)r)rr)r)rBrB)r)rrr)rCrC)r)rrr)rCrC)r)rrr)rCrD)r)rrr)rCrD)r)rrrr)rErE)r)rrrr)rErE)r)rrrr)r)rFrF)r)rrrr)r)rFrF)r)rrrrr)rr)rFrG)r)rrrrr)rr)rFrG)r)rrrrrr)rrr)rFrH)r)rrrrrr)rrr)rFrH)r)rrrr)r)rErI)r)rrrr)r)rErI)r)rrrrr)rr)rErJ)r)rrrrr)rr)rErJ)r)rrrrrr)rrr)rErK)r)rrrrrr)rrr)rErK)r)rrrr)r)rErE)r)rrrr)r)rErE)r)rrrrr)rr)rErL)r)rrrrr)rr)rErL)r)rrrrrr)rrr)rErM)r)rrrrrr)rrr)rErM)r)rrrr)rN)rErE)r)rrrr)rN)rErE)r)r6r6r6)rCrO)r)r6r6r6)rCrP)r)r6r6r6r6)rErQ)r)r6r6r6r6)rErR)r)r6r6r6r6)r)rFrS)r)r6r6r6r6)r)rFrT)r)r6r6r6r6)r)rErU)r)r6r6r6r6)r)rErV)r)r6r6r6r6)r)rErQ)r)r6r6r6r6)r)rErR)r)r)rWrX)r)r)rWrX)r)r)rWrY)r)r)rWrY)r)r)rWrZ)r)r)rWrZ)r)r)rWr[)r)r)rWr[)r)r)rWr\)r)r)rWr\)r)r)rWr])r)r)rWr])r)r)rWrW)r)r)rWrW)r)rr)r)r^r^)r)rr)r)r^r^)r)r)rWr_)r)r)rWr_)r)rrrr)r`r`)r)rrrr)r`r`)r)rrrrr)r)r`ra)r)rrrrr)r)r`ra)r)rrrrrr)rr)r`rb)r)rrrrrr)rr)r`rb)r)r6r6r6r6)r`rc)r)rrr)rCrF)r)rrr)rCrF)r)rrr)rdrd)r)rrr)rdrd)r)r)rr)r)rr)r;)r6)r6)r;)rrr)rrrr)rrrr)rrrr)rrr)rrr)r;)r6)r6)r;)arÕrÙÚloggingr†rúrñÚcollections.abcrZ fractionsrÚnumbersrrÚrrr r r Z_binaryr r Ú getLoggerr©r8r¤rÁZIFD_LEGACY_APIrÎr¸r¶ršr›r�r”r˜r™rÅrErŸr¦rÏr¡r¢r–r£r×rÆrÇrÈZ PREDICTORr©r¥rØržrœZ JPEGTABLESrÑrÒrÉrÂrÃr¨ZEXIFIFDrÄrÔZIMAGEJ_META_DATA_BYTE_COUNTSZIMAGEJ_META_DATAr“rÌrÐr rergrprvrÑrrjr¯rrÊráÚsetattrrSZImageFileDirectoryr_r¾rÜrârZ register_openr Z register_saveZregister_save_allZregister_extensionsZ register_mimerrrr!Ú)sâ     o \Mo