a :jg'@s$ddlmZddlZddlZddlZddlmZmZmZm Z ddl m Z m Z dddd d Z gd Zd dd ddZdddddZGddde j Zd5dddddZdddddZdd d!d"d#d$d%Zdd d!d"d#d&d'Ze ejee ejeed(kr eejd)kr&ed*eejdZeesJed+ee eZ ed,e ed-e jed.e j!ed/e j"ed0d1d2ee #eejd)krejd)Z$e %e j&j'Z ed3ej()ed4e$d1e *e$ejWdn1s0YdS)6) annotationsN)IO TYPE_CHECKINGAnycast)Image ImageFilerint)freturnc CsBz$t|}||dkrWdSWdSWnttfy<YdS0dS)Nrr)r ValueError OverflowError)r ir?/usr/local/lib/python3.9/site-packages/PIL/SpiderImagePlugin.pyisInt-s  r)riiiiztuple[float, ...])tr cCstd|}dD]}t||s dSq t|d}|tvr23frz<23f)openreadstructunpackr#)r%fpr rhdrlenrrr isSpiderImageUs (  r.c@seZdZdZdZdZddddZeddd d Zed dd d Z ddddZ dddddZ ddddddZ e rddlmZddddZdS)SpiderImageFileZSPIDERzSpider 2D imageFNone)r c Csd}|j|}zTd|_td|}t|}|dkrNd|_td|}t|}|dkrbd}t|Wn4tjy}zd}t||WYd}~n d}~00d|}t|d}|dkrd }t|t|d t|d f|_ t|d |_ t|d |_ |j dkr|j dkr|} d|_ n|j dkrv|j dkrvt|d t|d d|_ ||_t|d|_ |d } d|_ n6|j dkr|j dkr||j} d |_ n d}t||jrd|_nd|_d|_tdd|j| |jddfg|_|j|_dS)Nlrz>27frz<27fznot a valid Spider filerrznot a Spider 2D imagerrz inconsistent stack header valueszF;32BFzF;32FFrawrr)r,r)Z bigendianr*r+r# SyntaxErrorerrorr _sizeistack imgnumber_nimagesimgbytesr- stkoffsetrawmode_moder _TilesizeZtile_fp) selfnr rr-msgerroffsetrrr_openesZ       zSpiderImageFile._openr cCs|jSNr>rFrrrn_framesszSpiderImageFile.n_framesboolcCs |jdkSNrrMrNrrr is_animatedszSpiderImageFile.is_animatedcCs|jdkrdS|jdSdS)Nrr)r=rNrrrtells zSpiderImageFile.tell)framer cCs^|jdkrd}t|||s$dS|j||j|j|_|j|_|j|j| dS)Nrz#attempt to seek in a non-stack file) r<EOFErrorZ _seek_checkr-r?r@rEr,seekrK)rFrTrHrrrrVs  zSpiderImageFile.seek Image.Image)depthr csl|}t|dtsJttttf|\}}d||krH||| ||fdddS)Nrrcs |SrLr)rbmrrz.SpiderImageFile.convert2byte..L) getextrema isinstancefloatrtuplepointconvert)rFrYZextremaminimummaximumrrZr convert2bytes  zSpiderImageFile.convert2byterImageTkzImageTk.PhotoImagecCsddlm}|j|ddS)Nrri)palette)rjZ PhotoImagerh)rFrjrrr tkPhotoImages zSpiderImageFile.tkPhotoImageN)rW)__name__ __module__ __qualname__formatformat_descriptionZ!_close_exclusive_fp_after_loadingrKpropertyrOrRrSrVrhrrmrjrnrrrrr/`s=   r/zlist[str] | Nonezlist[SpiderImageFile] | None)filelistr c Cs|dust|dkrdSg}|D]}tj|s@td|q z6t|}|}Wdn1sj0YWn,tyt |st|dYq Yn0||j d<| |q |S)zJcreate a list of :py:class:`~PIL.Image.Image` objects for use in a montageNrzunable to find z is not a Spider image filer%) lenospathexistsprintrr(rh Exceptionr.infoappend)ruZimglistZimgimrrrloadImageSeriess"  *    rrXz list[bytes])r~r cCs|j\}}|d}td|}d|dkr2|d7}||}t|d}|dkrRgSdg|}d|d<t||d<t||d <d|d <t||d <t||d <t||d <t||d<|dd}|ddd|DS)Nr4irrrgg?rrrrrrcSsg|]}td|qS)r )r*pack).0vrrr r^z$makeSpiderHeader..)rDr rbr})r~ZnsamZnrowr"r r!ZnvalueshdrrrrmakeSpiderHeaders*             rz IO[bytes]z str | bytesr0)r~r,r%r c Csr|jddkr|d}t|}t|dkr8d}t|||d}t||tdd|j d|ddfgdS) Nrr6rkzError creating Spider headerzF;32NFr7r8r) modererrvOSError writelinesr _saverCrD)r~r,r%rrHrArrrrs    rcCsDtj|d}t|tr"|n|}ttj |t |||dSrQ) rwrxsplitextrabytesdecoderZregister_extensionr/rrr)r~r,r%Z filename_extextrrr _save_spider sr__main__rz7Syntax: python3 SpiderImagePlugin.py [infile] [outfile]z$input image must be in Spider formatzimage: zformat: zsize: zmode: z max, min:  )endzsaving a flipped version of z as )N)+ __future__rrwr*systypingrrrrrmrr rrr#r.r/rrrrZ register_openrrZ register_saverorvargvrzexitr%r(r~rDrr`outfileZ transposeZ TransposeZFLIP_LEFT_RIGHTrxbasenamesaverrrr#sP    v