B ]$@sddlmZddlZddlZddlZddlmZmZddZdddd d d gZ d d Z ddZ GdddejZ d&ddZ ddZddZddZee je ee jeedkreejdkredeejdZe esedeeeZedeeedeejed eejed!eejed"d#d$eeeejdkrejdZ e!ej"Zed%ej#$ee fe%e e jdS)')print_functionN)Image ImageFilec Cs>y t|}||dkrdSdSWnttfk r8dSXdS)Nr)int ValueError OverflowError)fir 7/tmp/pip-build-ktz6qwqq/Pillow/PIL/SpiderImagePlugin.pyisInt-s r riiiicCsvd|}xdD]}t||sdSqWt|d}|tkr>dSt|d}t|d}t|d}|||krrdS|S)N)c)r rrrrr)r riforms)thr iformlabreclabbytlenbytr r r isSpiderHeaderAs       rc CsTt|d}|d}WdQRXtd|}t|}|dkrPtd|}t|}|S)Nrb\z>23frz<23f)openreadstructunpackr)filenamefpr rhdrlenr r r isSpiderImageUs   r'c@sbeZdZdZdZdZddZeddZedd Z d d Z d d Z dddZ ddZ ddZdS)SpiderImageFileZSPIDERzSpider 2D imageFcCsd}|j|}yPd|_td|}t|}|dkrNd|_td|}t|}|dkr^tdWntjk r~tdYnXd|}t|d}|dkrtd t|d t|d f|_ t|d |_ t|d |_ |j dkr|j dkr|}d|_ n|j dkrT|j dkrTt|d t|d d|_ ||_t|d|_ |d }d|_ n2|j dkr~|j dkr~||j}d |_ ntd|jrd|_nd|_d|_dd|j||jddffg|_|j|_dS)Nlrz>27frz<27fznot a valid Spider file)rrznot a Spider 2D imagerrz inconsistent stack header valueszF;32BFzF;32FFraw)rr)r%r!Z bigendianr"r#r SyntaxErrorerrorr_sizeistack imgnumber_nimagesimgbytesr& stkoffsetrawmodemodesizeZtile_SpiderImageFile__fp)selfnr rr&rroffsetr r r _openfsP      zSpiderImageFile._opencCs|jS)N)r5)r<r r r n_framesszSpiderImageFile.n_framescCs |jdkS)Nr)r5)r<r r r is_animatedszSpiderImageFile.is_animatedcCs|jdkrdS|jdSdS)Nrr)r4)r<r r r tells zSpiderImageFile.tellcCsZ|jdkrtd||s dS|j||j|j|_|j|_|j|j| dS)Nrz#attempt to seek in a non-stack file) r3EOFErrorZ _seek_checkr&r6r7r;r%seekr?)r<framer r r rDs  zSpiderImageFile.seekcCsH|\}}d}||kr$|||}| |}|||fdddS)NrcSs |||S)Nr )r mbr r r z.SpiderImageFile.convert2byte..L) getextremaZpointconvert)r<depthZminimummaximumrGrHr r r convert2bytes    zSpiderImageFile.convert2bytecCsddlm}|j|ddS)Nr)ImageTk)Zpalette)PILrQZ PhotoImagerP)r<rQr r r tkPhotoImages zSpiderImageFile.tkPhotoImagecCsBz4y|j|jkr|jWntk r0YnXWdd|_XdS)N)r;r%closeAttributeError)r<r r r _close__fps   zSpiderImageFile._close__fpN)rF)__name__ __module__ __qualname__formatformat_descriptionZ!_close_exclusive_fp_after_loadingr?propertyr@rArBrDrPrTrWr r r r r(`s7   r(c Cs|dkst|dkrdSg}xx|D]p}tj|s@td|q"yt|}Wn*tk r|t |svt|dw"YnX||j d<| |q"W|S)zJcreate a list of :py:class:`~PIL.Image.Image` objects for use in a montageNrzunable to find %sz is not a Spider image filer$) lenospathexistsprintrr rP Exceptionr'infoappend)filelistZimglistimgimr r r loadImageSeriess      ric Cs|j\}}|d}td|}d|dkr2|d7}||}g}t|d}xt|D]}|dqTWt|dkrvgSd|d<t||d<d|d <t||d <t||d <t||d <t||d<|dd}|dg} x|D]} | td | qW| S)Nr,irrgrg?rrrrrr )r:rrangerer^floatr"pack) rhZnsamZnrowrrrhdrZnvaluesr Zhdrstrvr r r makeSpiderHeaders2             roc Csj|jddkr|d}t|}t|dkr4td||d}t||dd|jd|ddffgdS) Nrr.rRzError creating Spider headerzF;32NFr/)rrr) r9rMror^IOError writelinesr_saver:)rhr%r$rmr8r r r rrs   rrcCs.tj|d}ttj|t|||dS)Nr)r_r`splitextrZregister_extensionr(r[rr)rhr%r$extr r r _save_spidersru__main__rz6Syntax: python SpiderImagePlugin.py [infile] [outfile]z$input image must be in Spider formatzimage: zformat: zsize: zmode: z max, min:  )endz%saving a flipped version of %s as %s )N)& __future__rr_r"sysrSrrr rrr'r(rirorrruZ register_openr[Z register_saverXr^argvrbexitr$r rhstrr:r9rLoutfileZ transposeZFLIP_LEFT_RIGHTr`basenamesaver r r r $sJ    s "