3 }\!%@sddlmZddlmZmZddlZddlZddlZddZddd&d'd(d)gZ d d Z ddZ GdddejZ d*ddZ ddZddZddZeje je eje jeedkreejdkredejejdZe esedejejeZedeeedeejed eejed!eejed"d#d$eejeejdkrejdZ ej!ej"Zed%ej#j$ee fej%e e jdS)+)print_function)Image ImageFileNc Cs>y t|}||dkrdSdSWnttfk r8dSXdS)Nr)int ValueError OverflowError)fir m/private/var/folders/pf/wv4htv3x0qs2c2mp0dnn0kchsvlck3/T/pip-install-i584jbuk/Pillow/PIL/SpiderImagePlugin.pyisInt,s r r cCsvd |}xd D]}t||sd SqWt|d}|tkr>d St|d}t|d}t|d}|||krrd S|S) Ncrr rr)r)rrrrrrr)r riforms)thr iformlabreclabbytlenbytr r r isSpiderHeader?s       rc CsTt|d}|jd}WdQRXtjd|}t|}|dkrPtjd|}t|}|S)Nrb\z>23frz<23f)openreadstructunpackr)filenamefpr rhdrlenr r r isSpiderImageSs   r)c@sbeZdZdZdZdZddZeddZedd Z d d Z d d Z dddZ ddZ ddZdS)SpiderImageFileZSPIDERzSpider 2D imageFcCsd}|jj|}yPd|_tjd|}t|}|dkrNd|_tjd|}t|}|dkr^tdWntjk r~tdYnXd|}t|d }|dkrtd t|d t|d f|_ t|d |_ t|d|_ |j dko|j dkr|}d|_ n|j dkrV|j dkrVt|d t|d d|_ ||_t|d|_ |d }d|_ n2|j dkr|j dkr||j}d |_ ntd|jrd|_nd|_d|_dd|j||jddffg|_|j|_dS)Nrz>27frz<27fznot a valid Spider filerrznot a Spider 2D imagerrz inconsistent stack header valueszF;32BFzF;32FFrawl)r)rr)r'r#Z bigendianr$r%r SyntaxErrorerrorr_sizeistack imgnumber_nimagesimgbytesr( stkoffsetrawmodemodesizeZtile_SpiderImageFile__fp)selfnr rr(rroffsetr r r _opendsR       zSpiderImageFile._opencCs|jS)N)r7)r>r r r n_framesszSpiderImageFile.n_framescCs |jdkS)Nr)r7)r>r r r is_animatedszSpiderImageFile.is_animatedcCs|jdkrdS|jdSdS)Nrr)r6)r>r r r tells zSpiderImageFile.tellcCsZ|jdkrtd|j|s dS|j||j|j|_|j|_|jj|j|j dS)Nrz#attempt to seek in a non-stack file) r5EOFErrorZ _seek_checkr(r8r9r=r'seekrA)r>framer r r rFs  zSpiderImageFile.seekcCsH|j\}}d}||kr$|||}| |}|j||fddjdS)NrcSs |||S)Nr )r mbr r r sz.SpiderImageFile.convert2byte..L) getextremaZpointconvert)r>depthZminimummaximumrIrJr r r convert2bytes    zSpiderImageFile.convert2bytecCsddlm}|j|jddS)Nr)ImageTk)Zpalette)PILrRZ PhotoImagerQ)r>rRr r r tkPhotoImages zSpiderImageFile.tkPhotoImagecCsBz4y|j|jkr|jjWntk r0YnXWdd|_XdS)N)r=r'closeAttributeError)r>r r r _close__fps   zSpiderImageFile._close__fpN)rH)__name__ __module__ __qualname__formatformat_descriptionZ!_close_exclusive_fp_after_loadingrApropertyrBrCrDrFrQrUrXr r r r r*^s9   r*c Cs|dkst|dkrdSg}xx|D]p}tjj|s@td|q"ytj|j}Wn*tk r|t |svt|dw"YnX||j d<|j |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"rQ Exceptionr)infoappend)filelistZimglistimgimr r r loadImageSeriess      rjc Cs|j\}}|d}d|}d|dkr.|d7}||}g}t|d}xt|D]}|jdqPWt|dkrrgSd|d<t||d<d|d <t||d <t||d <t||d <t||d<|dd}|jdg} x|D]} | jtjd | qW| S)Nr,irrgrg?rrrrrr )r<rrangerfr_floatr$pack) riZnsamZnrowrrrhdrZnvaluesr Zhdrstrvr r r makeSpiderHeaders2            rpc Csj|jddkr|jd}t|}t|dkr4td|j|d}tj||dd|jd|ddffgdS) Nrr/rSzError creating Spider headerzF;32NFr0r)rr) r;rNrpr_IOError writelinesr_saver<)rir'r&rnr:r r r rs s   rscCs.tjj|d}tjtj|t|||dS)Nr)r`rasplitextrZregister_extensionr*r\rs)rir'r&extr r r _save_spidersrv__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 iiii)N)& __future__rrTrrr`r$sysr rrr)r*rjrprsrvZ register_openr\Z register_saverYr_argvrcexitr&r"ristrr<r;rMoutfileZ transposeZFLIP_LEFT_RIGHTrabasenamesaver r r r $sJ   t "