3 }\&@s: ddlmZmZddlmZmZmZmZddlm Z m Z ddl m Z ddl mZddlmZmZddlZddlZddlZddlZddlZddlZddlZdd lmZydd lmZWn ek rdd lmZYnXd Zd Z d Z!d Z"d Z#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5d Z6d!Z7d"Z8d#Z9d$Z:d%Z;d&Zd)Z?d*Z@d+ZAd,ZBd-ZCd.ZDd/ZEd0d1d2d3d4d5d6d7d8d9d:d;dd?d@dAZFdBdCeFjGDZHe$ddddffde%ddddffde$dddFdffde%dddFdffde$ddddffde%ddddffde$dddFdffde%dddFdffde$ddddffde%ddddffde$dddFdffde%dddFdffde$ddddffde%ddddffde$dddFdffde%dddFdffde$ddddffde%ddddffde$dddFdffde%dddFdffde$ddddffde%ddddffde$dddFdffde%dddFdffde$ddddffde%ddddffde$dddFdffde%dddFdffde$ddddffde%ddddffde$dddFdffde%dd dFd ffd e$dd dd ffde$ddddffde%ddddffde$ddddffde%ddddffde$ddddffde%ddddffd e$dd!dd"ffd#e$dd$dd%ffd&e%dd'dd(ffd)e$dd*dd+ffd,e%dd-dd.ffd/e$dd0dd1d2fd3e%dd4dd5d6fd7e$dFd8dd9ffd:e%dFd;dddFd?ffd@e%dFdAdFdBffdCe$dFdDddEffdFe%dFdGddHffdIe$dFdJddKdLfdMe%dFdNddOdPfdQe$dFdRddSdTfdUe%dFdVddWdXfdYe$dFdZdd[d\fd]e%dFd^dd_d`fdae$dFdbddcddfdee%dFdfddgdhfdie$dFdjddkdlfdme%dFdnddodpfdqe$dFdrddsdtfdue%dFdvddwdxfdye$dFdzdd{d|fd}e%dFd~dddfde$dFddddfde%dFddddfde$dFddddfde%dFddddfde$dFddddfde%dFddddfde$dFdddffde%dFdddffde$dFdddffde%dFdddffde$dFddddfde%dFddddfde$dFddddfde%dFddddfde$dFddddfde%dFddddfde$d_dddffde%d_dddffde$d_ddFdffde%d_ddFdffde$d_dddffde%d_dddffde$d_ddFdffde%d_ddFdffde$d_dddffde%d_dddffde$d_ddFdffde%d_ddFdffde$d_dddffde%d_dddffde$d_ddddfde%d_ddddfde$d_ddFdffde%d_ddFdffde$ddddffde%ddddffde$dddddfde%dddddfde$dddddfde%dddd d fd e$dd dd ffde%ddddffde$dSdddffde%dSdddffdinZIddddgZJddZKddZLddZMiZNiZOGdddeZPGdddeZQeNeQ_NeOeQ_OxNejGD]B\ZRZSeSjTddZSeUeQdeSeNeRdeUeQdeSeOeR q"W[N[O[R[SGdddeQZVeVZWGdddejZXdDe$ddddfdIe$ddddfdge$ddddFfd|e$d_dddfde$d_dddFfdee$ddFddfdXe$ddddfd]e$ddFddfdbe$dd_d dfdhe$dFdd!dfdke$dFdd"dfdje$dFdd#dFfde$ddd$dfde$ddd%dfde$dSdd&dfdfe%ddFd'dfd[e%ddd(dfd^e%ddFd)dfdce%dd_d*dfdZYddZZGdddZ[ddZ\ej]eXj^eXeKej_eXj^eZej`eXj^e\ejaeXj^ddgejbeXj^ddS(+)divisionprint_function)Image ImageFile ImagePaletteTiffTags)i8o8)py3)Fraction)NumberRationalN)TYPES)MutableMappingz1.3.5FTsIIsMMiiiii iiiiiiiii(i1i2i;i=i@iDiRiSi[iiiIisiiiiirawZ tiff_ccittZgroup3Zgroup4Ztiff_lzw tiff_jpegZjpegZtiff_adobe_deflateZ tiff_raw_16ZpackbitsZtiff_thunderscanZ tiff_deflateZ tiff_sgilogZ tiff_sgilog24lzmaZzstdZwebp)riii)iitiuimiPiQcCsi|]\}}||qSr).0kvrrk/private/var/folders/pf/wv4htv3x0qs2c2mp0dnn0kchsvlck3/T/pip-install-i584jbuk/Pillow/PIL/TiffImagePlugin.py sr!11;Ir1;IR1;RLL;2IL;2IRL;2L;2RrL;4IL;4IRL;4L;4RrL;IL;IRL;R I;16I;12I;16BII;16SI;16BSr FF;32FF;32BFI;32NI;32SI;32BSLARGBRGB;RRGBARGBXRGBXXRGBXXXRGBaRGBaXRGBaXXRGBAXRGBAXXRGB;16LRGB;16BRGBA;16LRGBA;16BRGBX;16LRGBX;16BRGBa;16LRGBa;16BPP;1P;1RP;2P;2RP;4P;4RPAP;RrCMYKCMYKXCMYKXXrLABsMM*sII*sMM*sII*cCs|ddtkS)Nr)PREFIXES)prefixrrr _acceptsrecCs<t|dk}t|rd|n|j|}|r8|dddS|S)Nr)abs IFDRationallimit_rational)valZmax_valinvZn_drrr _limit_rationals rlcCstjjjddjddS)N rzVersion r)rcoreZlibtiff_versionsplitrrrr _libtiff_version%srpc@s>eZdZdZd3Zd4ddZedd Zed d Zd d Z ddZ ddZ ddZ ddZ e dZe dZe dZe dZe dZe dZe dZe dZe dZe dZe 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 d0Z(e d1Z)d2S)5rhz 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||_||_td|_t|tr6|j|_|j|_||_t|tr\|j|_|j|_|j|_dS|dkrrtd|_dS|dkrt||_n t|||_dS)z :param value: either an integer numerator, a float/rational/other number, or an IFDRational :param denominator: Optional integer denominator rNrnan) rrrqfloatrs isinstancer numerator denominatorrh)selfvaluerxrrr __init__>s$     zIFDRational.__init__cCs|jS)N)rq)arrr rw\szIFDRational.numeratorcCs|jS)N)rr)r|rrr rx`szIFDRational.denominatorcCs.|jdkr|j|jfS|jj|}|j|jfS)z :param max_denominator: Integer, the maximum denominator value :returns: Tuple of (numerator, denominator) r)rxrwrsZlimit_denominator)ryZmax_denominatorfrrr rids   zIFDRational.limit_rationalcCstt|jS)N)strrurs)ryrrr __repr__qszIFDRational.__repr__cCs |jjS)N)rs__hash__)ryrrr rtszIFDRational.__hash__cCs |j|kS)N)rs)ryotherrrr __eq__wszIFDRational.__eq__csfdd}|S)Ncst|j|S)N)getattrrs)ryargs)oprr delegate{sz'IFDRational._delegate..delegater)rrr)rr _delegatezs zIFDRational._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)rqrrrs)r)*__name__ __module__ __qualname____doc__ __slots__r{propertyrwrxrirrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr rh0sL     rhc @seZdZdZd^ddZeddZeddZed dZej d d Zd d Z ddZ ddZ ddZ ddZddZesddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zeeeejd,d-fejd.d/fej d0d1fej!d2d3fej"d4d5fej#d6d7fej$d8d9fged:d:d_dd?Z&ed@d:d`dAdBZ'ed@dCdDZ(edEdFdadGdHZ)edEdIdJZ*edKd:dbdLdMZ+edKdNdOZ,edPdFdcdQdRZ-edPdSdTZ.dUdVZ/dWdXZ0dddZd[Z1d\d]Z2dS)eImageFileDirectory_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 `~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 II*NcCs|ddtkrtd||dk r(|n |dd|_|jtkrHd|_n|jtkrZd|_ntd|j|jd|dd\|_d |_ dS) aInitialize 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>szImageFileDirectory_v2.cCs|jS)N)_offset)ryrrr rscCs|jS)N)r)ryrrr rscCs tddS)Nz"Not allowing setting of legacy api) Exception)ryrzrrr legacy_apisz ImageFileDirectory_v2.legacy_apicCs(i|_i|_i|_i|_d|_d|_dS)N)_tags_v1_tags_v2_tagdatatagtype_nextr)ryrrr rs zImageFileDirectory_v2.resetcCs tt|S)N)r~dict)ryrrr __str__szImageFileDirectory_v2.__str__cCstdd|jDS)z :returns: dict of name|key: value Returns the complete tag dictionary, with named tags where possible. css"|]\}}tj|j|fVqdS)N)rlookupname)rcoderzrrr sz.ImageFileDirectory_v2.named..)ritems)ryrrr namedszImageFileDirectory_v2.namedcCstt|jt|jBS)N)lensetrr)ryrrr __len__szImageFileDirectory_v2.__len__cCsh||jkr>|j|}|j|}|j|\}}||||j||<|j|}|jrdt|ttf rd|f}|S)N)rrr_load_dispatchrrvtuplebytes)rytagdatatypsizehandlerrjrrr __getitem__s    z!ImageFileDirectory_v2.__getitem__cCs||jkp||jkS)N)rr)ryrrrr __contains__sz"ImageFileDirectory_v2.__contains__cCs||kS)Nr)ryrrrr has_key!szImageFileDirectory_v2.has_keycCs|j|||jdS)N)_setitemr)ryrrzrrr __setitem__$sz!ImageFileDirectory_v2.__setitem__c s>tttf}ts|tf7}tj|t||r2|gn|}||jkrj rVj |j|<ntj |j|<t dd|Drtj |j|<nt dd|Drt dd|Drtj |j|<n tj|j|<nTt dd|Drtj|j|<n4tr t dd|Drtj|j|<n tj|j|<|j|tj krNtrNt|trF|jddn|g}n |j|tj krnd d |D}tfd d|D}|r|jn|j}jd ksĈjdkr2t|d kr2| r2|r|j|tj tjgkr|f}y|\||<Wn8tk r.tjd |t|f|d||<YnXn|||<dS)Ncss|]}t|tVqdS)N)rvrh)rrrrr r4sz1ImageFileDirectory_v2._setitem..css|]}t|tVqdS)N)rvint)rrrrr r6scss|]}|dkVqdS)rr5Nir)rrrrr r7scss|]}t|tVqdS)N)rvru)rrrrr r;scss|]}t|tVqdS)N)rvr~)rrrrr r?sasciireplacecSs"g|]}t|trt|n|qSr)rvrru)rrrrr Isz2ImageFileDirectory_v2._setitem..c3s|]}j|VqdS)N)Zcvt_enum)rrz)inforr rLsrz=Metadata Warning, tag %s had too many entries: %s, expected 1r)r rr~r unicoderrrvrtype UNDEFINEDallZRATIONALSHORTLONGDOUBLEASCIIencoderrrlengthrZSIGNED_RATIONAL ValueErrorwarningswarn)ryrrzrZ basetypesvaluesdestr)rr r'sV       " zImageFileDirectory_v2._setitemcCs.|jj|d|jj|d|jj|ddS)N)rpoprr)ryrrrr __delitem__lsz!ImageFileDirectory_v2.__delitem__cCstt|jt|jBS)N)iterrrr)ryrrr __iter__qszImageFileDirectory_v2.__iter__cCstj|j||S)N)structunpackr)ryfmtrrrr rtszImageFileDirectory_v2._unpackcGstj|j|f|S)N)rpackr)ryrrrrr _packwszImageFileDirectory_v2._packcsfdd}|S)NcsBddlm}|jjdr2|jddjdd|<|ft<|S)Nr)rload_r_ )rrr startswithrr)funcr)idxrrr decorator{s    z9ImageFileDirectory_v2._register_loader..decoratorr)rrrr)rrr _register_loaderzsz&ImageFileDirectory_v2._register_loadercsfdd}|S)Ncs |t<|S)N)_write_dispatch)r)rrr rsz9ImageFileDirectory_v2._register_writer..decoratorr)rrr)rr _register_writers z&ImageFileDirectory_v2._register_writercsXddlm}|\}}|||<tjddfdd ft|<fddt|<dS) Nr)r=Tcs|jdjt||S)Nz{}{})rformatr)ryrr)rrrr rsz7ImageFileDirectory_v2._register_basic..csdjfdd|DS)Nc3s|]}j|VqdS)N)r)rrz)rryrr rszJImageFileDirectory_v2._register_basic....)join)ryr)r)ryr rs)T)rrrcalcsizerr)Z idx_fmt_namerrrr)rrr _register_basics   z%ImageFileDirectory_v2._register_basicHshortr&longbz signed bytehz signed shortlz signed longr}ruddoublerTcCs|S)Nr)ryrrrrr load_byteszImageFileDirectory_v2.load_bytecCs|S)Nr)ryrrrr write_bytesz ImageFileDirectory_v2.write_bytercCs"|jdr|dd}|jddS)Nrzlatin-1rrf)endswithdecode)ryrrrrr load_strings  z!ImageFileDirectory_v2.load_stringcCs,tjjdkr|jdd}d|jdddS)Nrrrrr)sys version_infomajorrr)ryrzrrr write_strings  z"ImageFileDirectory_v2.write_stringrrcsV|jdjt|d|}fddtfddt|ddd|dddDS) Nz{}Lrcsr ||fSt||S)N)rh)r|r )rrr combinesz4ImageFileDirectory_v2.load_rational..combinec3s|]\}}||VqdS)Nr)rnumdenom)rrr rsz6ImageFileDirectory_v2.load_rational..rr)rrrrzip)ryrrvalsr)rrr load_rationals  z#ImageFileDirectory_v2.load_rationalcsdjfdd|DS)Nrc3s"|]}jdt|dVqdS)2LrN)rl)rrl)rfrac)ryrr rsz7ImageFileDirectory_v2.write_rational..)r)ryrr)ryr write_rationalsz$ImageFileDirectory_v2.write_rationalrcCs|S)Nr)ryrrrrr load_undefinedsz$ImageFileDirectory_v2.load_undefinedcCs|S)Nr)ryrzrrr write_undefinedsz%ImageFileDirectory_v2.write_undefined csV|jdjt|d|}fddtfddt|ddd|dddDS) Nz{}lrcsr ||fSt||S)N)rh)r|r )rrr rsz;ImageFileDirectory_v2.load_signed_rational..combinec3s|]\}}||VqdS)Nr)rrr)rrr rsz=ImageFileDirectory_v2.load_signed_rational..rr)rrrrr)ryrrrr)rrr load_signed_rationals  z*ImageFileDirectory_v2.load_signed_rationalcsdjfdd|DS)Nrc3s"|]}jdt|dVqdS)rrN)ri@)rrl)rr )ryrr rsz>ImageFileDirectory_v2.write_signed_rational..)r)ryrr)ryr write_signed_rationalsz+ImageFileDirectory_v2.write_signed_rationalcCs2|j|}t||kr.tdd|t|f|S)NzCorrupt EXIF data. z,Expecting to read %d bytes but only got %d. )readrIOError)ryfprretrrr _ensure_reads   z"ImageFileDirectory_v2._ensure_readcCs|j|j|_yxt|jd|j|ddD]j}|jd|j|d\}}}}trtj|j }t j |d}t d||||fdd y|j |\} } Wn$tk rtrt d |w6YnX|| } | d kr(|j} |jd |\} trt d | | fdd |j| tj|| }|j| n |d| }t|| kr\tjd| t||fq6|sdq6||j|<||j|<tr6| dkrt d| q6t d||q6W|jd |j|d \|_Wn0tk r}ztjt|dSd}~XnXdS)NrrrHHL4sr2unknownztag: %s (%d) - type: %s (%d)r)endz- 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: z- value:)rtellrrangerr,DEBUGrrrrgetprintrKeyErrorseekr _safe_readrrrrrrr)r~)ryr*irrcountrtagnametypnameZ unit_sizerrhereoffsetmsgrrr loadsX &           zImageFileDirectory_v2.loadrc Cs|jdt|j}g}|t|t|jdd}d}x^t|jjD]J\}}|tkrdt|}|jj|}trt d|||ft |t r|n|f}|j ||f|} trt j|j} tj|d} t d| || |fddt| d krt d t| n t d ||t jt jt jgkr.t| } nt|} t| dkrb|j||| | jdd d fqJ|j||| |jd|| f|t| ddd7}qJW|dk r||\}}} }} | rtd|jd|jd|d|}||| || f||<xP|D]H\}}} }} tdkr(t ||| t|t| ||jd||| |7}qW|d7}x6|D].\}}} }} || 7}t| d@rR|d 7}qRW|S)Nrr2rzTag %s, Type: %s, Value: %sr.zsave: %s (%d) - type: %s (%d)r)r/r5z- value: z- value:rrr&rrz&multistrip support not yet implementedrr-s)rrrsortedr STRIPOFFSETSrr3r2r4rvrrrrrrZBYTErrappendljustNotImplementedErrorrrepr) ryr=resultentriesZ stripoffsetsrrzrrrr:r;r9rrr tobytessZ       zImageFileDirectory_v2.tobytescCsN|jdkr&|j|j|jddd|j}|j|}|j||t|S)NrZHL*r)r0writerrrHr)ryr*r=rFrrr saveWs    zImageFileDirectory_v2.save)rN)T)T)T)T)T)r)3rrrrr{rrdr=rsetterrrrrrrr rrrrrrrrrrlistmaprrrZ SIGNED_BYTEZ SIGNED_SHORTZ SIGNED_LONGFLOATrrrrrrr!r"r#r%r'r,r?rHrKrrrr rsd      E             9 CrrrrZwrite_c@sleZdZdZddZeddZeddZeddZ d d Z d d Z d dZ ddZ ddZddZdS)ImageFileDirectory_v1aThis 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, `~PIL.TiffImagePlugin.ImageFileDirectory_v1.tagtype`. Values are returned as a tuple. .. deprecated:: 3.0.0 cOstj|f||d|_dS)NT)rr{r)ryrkwargsrrr r{szImageFileDirectory_v1.__init__cCs|jS)N)r)ryrrr rszImageFileDirectory_v1.cCs|jS)N)r)ryrrr rscCs(||jd}|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` )rd)rdrrr)clsoriginalifdrrr from_v2s zImageFileDirectory_v1.from_v2cCs4t|jd}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` )rd)rrdrrrr)ryrTrrr to_v2s    zImageFileDirectory_v1.to_v2cCs||jkp||jkS)N)rr)ryrrrr rsz"ImageFileDirectory_v1.__contains__cCstt|jt|jBS)N)rrrr)ryrrr rszImageFileDirectory_v1.__len__cCstt|jt|jBS)N)rrrr)ryrrr rszImageFileDirectory_v1.__iter__cCs xdD]}|j|||qWdS)NFT)FT)r)ryrrzrrrr rs z!ImageFileDirectory_v1.__setitem__cCsr||jkrP|j|}|j|}|j|\}}x"dD]}|j||||||q2W|j|}t|ttfsn|f}|S)NFT)FT)rrrrrrvrr)ryrrrrrlegacyrjrrr rs     z!ImageFileDirectory_v1.__getitem__N)rrrrr{rtagsZtagdata classmethodrUrVrrrrrrrrr rPms   rPcseZdZdZdZdZddZeddZedd Z d d Z d d Z ddZ eddZ e jddZ fddZddZddZddZddZZS) TiffImageFileZTIFFz Adobe TIFFFcCs||jjd}t||_d|_|_|jj|_|_d|_ |j|_ g|_ d|_ t rntdtd|jtd||jddS) z#Open the first image in a TIFF filerNrz*** TiffImageFile._open ***z - __first:z- ifh: rrf)r*r(rtag_v2rrTrZ_TiffImageFile__first_TiffImageFile__next_TiffImageFile__frame_TiffImageFile__fp _frame_pos _n_framesr2r4_seek)ryrrrr _opens     zTiffImageFile._opencCsT|jdkrN|j}|jt|jx |jdkrB|j|jdq$W|j||jS)Nr)r`r0rarr_r6)rycurrentrrr n_framess   zTiffImageFile.n_framescCs|jS)N) _is_animated)ryrrr is_animatedszTiffImageFile.is_animatedcCs<|j|sdS|j|tj|jtjj|j|j|_dS)z%Select a given frame as current imageN) Z _seek_checkrarZ_decompression_bomb_checkrrnnewmodeim)ryframerrr r6s    zTiffImageFile.seekcCs"|j|_xt|j|kr|js&tdtrHtd||j|j|jj f|jj |jj |j|jj |jtrtd|jj |j j |j|j j|_|jdkr|d|_t|jdkr|jdk|_|jd7_q W|jj |j||j j |jtj|j |_|_||_|jdS)Nzno more images in TIFF filez9Seeking to frame %s, on frame %s, __next %s, location: %szLoading tags, location: %srr)r^r*rr_r\EOFErrorr2r4r]r0r6rBr[r?rr`rerPrUrrT_setup)ryrjrrr ras0     zTiffImageFile._seekcCs|jS)zReturn the current frame number)r])ryrrr r0"szTiffImageFile.tellcCs|jS)N)_size)ryrrr r&szTiffImageFile.sizecCstjdt||_dS)NzSetting the size of a TIFF image directly is deprecated, and will be removed in a future version. Use the resize method instead.)rrDeprecationWarningrm)ryrzrrr r*scs|jr|jStt|jS)N)use_load_libtiff _load_libtiffsuperrZr?)ry) __class__rr r?3szTiffImageFile.loadcCs|js d|_dS)NT)re!_close_exclusive_fp_after_loading)ryrrr load_end8szTiffImageFile.load_endcCstjj|}|jdkrtd|js(|S|jt|jdksFtd|jdd}t|jdd|jjg}y6t |j dot j |j j }t |j dr|j jWntk rd }YnX|r||d <tj|jd t||j}y|j|j|Wntk rtd YnXt |j d rHtr2td|j|j j\}}nZt |j drtrdtd|j jd|jd\}}n"trtd|j|j j\}}g|_d|_|jr|j r|j jd|_ |dkrt|tjj|S)z] Overload method triggered when we detect a compressed tiff Calls out to libtiff Nzcannot load this imagerzNot exactly one tilerrfilenoflushFrlibtiffzCouldn't set the imagegetvaluez5have getvalue. just sending in a string from getvaluez3have fileno, calling fileno version of the decoder.sfpfpz+don't have fileno or getvalue. just reading) rr?tiler)Z load_preparerrMr[r=hasattrr*osduprurvZ _getdecoderrhrZ decoderconfigsetimagerirr2r4rrxr6r(readonlyZ _exclusive_fpreclose)ryZpixelZextentsrr*decodernerrrrr rp>sX        zTiffImageFile._load_libtiffcCszd|jkrtdt|jjtd|_|jjtd|_|jjtd}|jdkrRd}|jjt d}t rt dt d|jt d |t d |jt d |t d |j jd |jjt }|jjt}||f|_t rt d|j|jjtd0}t|dkr t|t|kodknr d1}|jjtd2}|jjtf}|d3krLd}n|dkr\d}nd}|t|7}|t|krt|dkr||}|jj|||||f} t rt d| yt| \|_} Wn,tk rt rt dtdYnXt rt d| t d|j|j|jd<|jjtd} |jjtd} | r| r|jjt} | dkrzt | dt | df|jd<nx| dkrt | ddt | ddf|jd<nF| dkrt | dt | df|jd<| | f|jd<n| | f|jd<d}}}g|_!t"p|jdk|_#|j#r|dkrb| ddd4| dd} t rTt d| t| \|_} | d krpd!} d"| kr| j$d"d#} d$| kr| j$d$d#} | |jd%f}|j!j%|jdd||fd|fn\t&|jkst'|jkrt&|jkr|jt&}|jjt(|}|jd}n"|jt'}|jjd&}|jjd'}x|D]}|||kr^|t)|d}nd}| }|jdkr| |}||}|t |df}|j!j%|j||t|||t|||f||f||}||jdkr:d||}}||jdkr:d}}|d7}q:Wnt rt d(td)t*|jkrB|jt*|jd*<|jd+krvd,d-|jt+D}t,j-d.d/j.||_/dS)5z-Setup this image object based on current tagsiz+Windows Media Photo files not yet supportedrrrrz*** Summary ***z- compression:z- photometric_interpretation:z- planar_configuration:z - fill_order:z- YCbCr subsampling:iz- size:rrrrrz format key:z- unsupported formatzunknown pixel modez - raw mode:z - pil mode: compressiong?dpigRQ@N resolutionrzI;16zI;16Nz;16Bz;16Nz;16LFiBiCz- unsupported data organizationzunknown data organization icc_profilerVcSsg|]}t|dqS)r)r )rr rrr rPsz(TiffImageFile._setup..zRGB;Lr)r)r)r)rrr)r)0r[r)COMPRESSION_INFOr3 COMPRESSION _compressionPLANAR_CONFIGURATION_planar_configurationPHOTOMETRIC_INTERPRETATION FILLORDERr2r4r IMAGEWIDTH IMAGELENGTHrmr SAMPLEFORMATrmaxmin BITSPERSAMPLE EXTRASAMPLESrd OPEN_INFOrhr5rr X_RESOLUTION Y_RESOLUTIONRESOLUTION_UNITrry READ_LIBTIFFrorrBrA TILEOFFSETS ROWSPERSTRIPsum ICCPROFILECOLORMAPrrrpalette)ryphotoZ fillorderZxsizeZysizeZ sampleFormatZ bps_tupleZ extra_tupleZ bps_countkeyrawmodeZxresZyresZresunitxyZlayerr|offsetsr wr=strideZ tile_rawmoderrrr rls          $             (                      zTiffImageFile._setupcCsBz4y|j|jkr|jjWntk r0YnXWdd|_XdS)N)r^r*rAttributeError)ryrrr _close__fpSs   zTiffImageFile._close__fp)rrrrformat_descriptionrsrbrrdrfr6rar0rrLr?rtrprlr __classcell__rr)rrr rZs"    V@rZYCbCr)r"r&rArVr]r7zI;16zI;16Sr;rBrErDr_rrbzI;32BSzI;16BzI;16BSzF;32BFcCsyt|j\}}}}}}Wn"tk r<td|jYnXt|d} |jjd|jjd} | dkrjd} tpt| dk} t |dd| t <|j d| t <|j d| t <|jjdi} trtd t| t| tr| j} xF| D]>} | j| | | <y| j| | j| <Wqtk rYqXqWt|d rrxFttttttfD]2} | |jkr<|j| | | <|jj| | j| <q| j5t |d ij5|j5D]\}}|t?j@krVt?jA|jBt?jCkr qtDjEjFtGtDjEjFd#kst|t$tHtItJfpLtK oLt|tL rVq||kr||krt|tKrxtIntLr|jMd$d%d&||<n"t|tNrtH|||<n|||<qWtrtd't4|j5|jd1krd*}|| |||f}tOjP|jd+||jQ}|jR|j+d2|j x.|jMd3\}}}|s@|jS||r Pq W|dkrtd.|n.| jT|}tUjV||dd4|j |||dffgd/|jkr| |_WdS)5Nzcannot write mode %s as TIFF)rdrrrrrZtiffinfozTiffinfo Keys: %sr[r descriptionrZ x_resolutionZ y_resolutionZresolution_unitZsoftware date_timeZartist copyrightrrg?rVrBzRGB;Lcss|]}t|dVqdS)rN)r )rrrrr rsz_save..rrzSaving using libtiff encoderz Items: %srurz4.0rrrzConverted items: %sI;16BI;16zI;16Nrwr5iz(encoder error %d when writing image file_debug_multipage)r)rr)rri@)rr)X SAVE_INFOrhr5r)r encoderinfor3r WRITE_LIBTIFFrrrrrr2r4rMrvrPrVrrrzrrrIPTC_NAA_CHUNKPHOTOSHOP_CHUNKXMPr[rIMAGEDESCRIPTIONSOFTWARE DATE_TIMEARTIST COPYRIGHTrrrSAMPLESPERPIXELrrrriZ getpaletterrrSTRIPBYTECOUNTSrACOMPRESSION_INFO_REVrr@rr6r{r|ruioUnsupportedOperationr itertoolschainrZ LIBTIFF_CORErrr distutilsversionZ StrictVersionrprur~rr rrrhrZ _getencoder encoderconfigr}rJrKr_saver)rir*filenamerrdrrbitsextrarTrrwrrrrZlutr_fpZ blocklistZattsZ legacy_ifdrrzr|er sr r=rrr r~s               "             rc @seZdZdddddddddddddg Zdddd d d hZd:d dZddZddZddZddZ ddZ ddZ e j fddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zd;d7d8Zd9S)<AppendingTiffWriterrrrrrii iDiii Fc Cszt|dr||_d|_nJ||_d|_ytj||r4dnd|_Wn"tk r`tj|d|_YnX|jj|_|j dS)Nr(FTzw+bzr+b) rzr}close_fprropenr)r0 beginningsetup)ryfnrgrrr r{Ds  zAppendingTiffWriter.__init__cCs|jj|jtjd|_d|_|jjd|_}|s>d|_ dSd|_ |dkrX|j dn|dkrl|j dnt d |j |j dS) NrrTFsII*rsMM*rzInvalid TIFF file header)r}r6rr{SEEK_SETwhereToWriteNewIFDOffsetoffsetOfNewPager(IIMMisFirst setEndian RuntimeErrorskipIFDsgoToEnd)ryrrrr rRs  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) rr}r6rr(rrreadLongr writeLongfixIFD)ryr IFDoffsetrrr finalizejs     zAppendingTiffWriter.finalizecCs|j|jdS)N)rr)ryrrr newFrameszAppendingTiffWriter.newFramecCs|S)Nr)ryrrr __enter__szAppendingTiffWriter.__enter__cCs|jr|jdS)NF)rr)ryexc_type exc_value tracebackrrr __exit__szAppendingTiffWriter.__exit__cCs|jj|jS)N)r}r0r)ryrrr r0szAppendingTiffWriter.tellcCs*|tjkr||j7}|jj|||jS)N)r{rrr}r6r0)ryr=whencerrr r6s  zAppendingTiffWriter.seekcCsb|jjdtj|jj}d|d}d|ko8dknrR|jjtt||jj|_dS)Nrr5) r}r6r{SEEK_ENDr0rJr bytearrayr)ryposZpadBytesrrr rs   zAppendingTiffWriter.goToEndcCs.||_|jd|_|jd|_|jd|_dS)Nr&rZHHL)endianlongFmtshortFmt tagFormat)ryrrrr rs  zAppendingTiffWriter.setEndiancCsTxN|j}|dkr$|jjd|_P|jj||j}|jj|dtjqWdS)Nrrr2)rr}r0rr6 readShortr{SEEK_CUR)ryrnumTagsrrr rs zAppendingTiffWriter.skipIFDscCs |jj|S)N)r}rJ)ryrrrr rJszAppendingTiffWriter.writecCstj|j|jjd\}|S)Nr)rrrr}r()ryrzrrr rszAppendingTiffWriter.readShortcCstj|j|jjd\}|S)Nr)rrrr}r()ryrzrrr rszAppendingTiffWriter.readLongcCsF|jjdtj|jjtj|j|}|dk rB|dkrBtd|dS)Nrrz wrote only %u bytes but wanted 4) r}r6r{rrJrrrr)ryrz bytesWrittenrrr rewriteLastShortToLongs z*AppendingTiffWriter.rewriteLastShortToLongcCsF|jjdtj|jjtj|j|}|dk rB|dkrBtd|dS)Nrz wrote only %u bytes but wanted 2r) r}r6r{rrJrrrr)ryrzrrrr rewriteLastShorts z$AppendingTiffWriter.rewriteLastShortcCsF|jjdtj|jjtj|j|}|dk rB|dkrBtd|dS)Nrz wrote only %u bytes but wanted 4) r}r6r{rrJrrrr)ryrzrrrr rewriteLastLongs z#AppendingTiffWriter.rewriteLastLongcCs6|jjtj|j|}|dk r2|dkr2td|dS)Nrz wrote only %u bytes but wanted 2)r}rJrrrr)ryrzrrrr writeShortszAppendingTiffWriter.writeShortcCs6|jjtj|j|}|dk r2|dkr2td|dS)Nrz wrote only %u bytes but wanted 4)r}rJrrrr)ryrzrrrr rszAppendingTiffWriter.writeLongcCs|j|jjdS)N)rr}r)ryrrr rszAppendingTiffWriter.closec Cs|j}xt|D]}tj|j|jjd\}}}|j|}||}|dk}|sl|j} | |j 7} |j | ||j kr|jj } |r|j ||dk|dkd|jj| dn0|jj| |j ||dk|dkd|jj| d} } q|r|jjdtjqWdS)Nrrr)isShortisLong)rr1rrrr}r( fieldSizesrrrTagsr0 fixOffsetsr6r{r) ryrr8rZ fieldTyper9Z fieldSizeZ totalSizeZisLocalr=ZcurPosrrr rs0            zAppendingTiffWriter.fixIFDcCs| r| rtdxt|D]}|r.|jn|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)rr1rrrrr}r6r{rrrrrr)ryr9rrr8r=rrr rs      zAppendingTiffWriter.fixOffsetsN)F)FF)rrrrrr{rrrrrr0rrr6rrrrJrrrrrrrrrrrrrr r+sH    "rc Cs|jj}|j}t|jdg}t|d r>| r>t|||S|j}zt|t}xl|g|D]^}||_||_t|ds~d} n|j } x6t | D]*} |j | |j t||||j qWq^WWdQRXWd|j |XdS)N append_imagesrdr)rcopyrrMr3rzrr0rrdr1r6r?r) rir*rrrrZcur_idxtfZimsZnfrrrrr _save_alls(      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&r/)r)r)r&r/)r)r)r&r0)r)r)r&r0)r)r)r&r&)r)r)r&r&)r)r)r&r1)r)r)r&r1)r)r2)r3r4)r)r5)r3r3)r)r5)r6r6)r)r5)r7r8)r)r5)r7r9)r)r:)r;r<)r)r:)r;r=)r)r:)r7r>)r)r:)r7r?)r)r:)r7r@)r)r:)r;r<)r)r:)r;r=)r)rr)r)rArA)r)rr)r)rArA)r)rrr)rBrB)r)rrr)rBrB)r)rrr)rBrC)r)rrr)rBrC)r)rrrr)rDrD)r)rrrr)rDrD)r)rrrr)r)rErE)r)rrrr)r)rErE)r)rrrrr)rr)rErF)r)rrrrr)rr)rErF)r)rrrrrr)rrr)rErG)r)rrrrrr)rrr)rErG)r)rrrr)r)rDrH)r)rrrr)r)rDrH)r)rrrrr)rr)rDrI)r)rrrrr)rr)rDrI)r)rrrrrr)rrr)rDrJ)r)rrrrrr)rrr)rDrJ)r)rrrr)r)rDrD)r)rrrr)r)rDrD)r)rrrrr)rr)rDrK)r)rrrrr)rr)rDrK)r)rrrrrr)rrr)rDrL)r)rrrrrr)rrr)rDrL)r)rrrr)rM)rDrD)r)rrrr)rM)rDrD)r)r5r5r5)rBrN)r)r5r5r5)rBrO)r)r5r5r5r5)rDrP)r)r5r5r5r5)rDrQ)r)r5r5r5r5)r)rErR)r)r5r5r5r5)r)rErS)r)r5r5r5r5)r)rDrT)r)r5r5r5r5)r)rDrU)r)r5r5r5r5)r)rDrP)r)r5r5r5r5)r)rDrQ)r)r)rVrW)r)r)rVrW)r)r)rVrX)r)r)rVrX)r)r)rVrY)r)r)rVrY)r)r)rVrZ)r)r)rVrZ)r)r)rVr[)r)r)rVr[)r)r)rVr\)r)r)rVr\)r)r)rVrV)r)r)rVrV)r)rr)r)r]r])r)rr)r)r]r])r)r)rVr^)r)r)rVr^)r)rrrr)r_r_)r)rrrr)r_r_)r)rrrrr)r)r_r`)r)rrrrr)r)r_r`)r)rrrrrr)rr)r_ra)r)rrrrrr)rr)r_ra)r)rrr)rBrE)r)rrr)rBrE)r)rrr)rbrb)r)rrr)rbrb)r)r)rr)r)rr)r:)r5)r5)r:)rrr)rrrr)rrrr)rrrr)rrr)rrr)r:)r5)r5)r:)c __future__rrrrrr_binaryr r Z_utilr Z fractionsr Znumbersr rrrr{rrrZdistutils.versionrrcollections.abcr ImportError collections __version__r2rrZIFD_LEGACY_APIrrrrrrrrrrArrrrrrrrrrZ PREDICTORrrrrZ JPEGTABLESrrrrZEXIFIFDrZIMAGEJ_META_DATA_BYTE_COUNTSZIMAGEJ_META_DATArrrrrcrerlrprrrhrrrrsetattrrPZImageFileDirectoryrZrrrrZ register_openrZ register_saveZregister_save_allZregister_extensionsZ register_mimerrrr *s   uA W .t