
hR\$                 @   sv  d  d l  m Z d  d l m Z m Z d  d l Z d  d l Z d  d l Z d d   Z d d d' d( d) d* g Z	 d d   Z
 d d   Z Gd d   d e j  Z d d d  Z d d   Z d d   Z d d   Z e j e j e  e j e j e  e d k rre j d d  s.e d  e j   n  e j d Z e e  s^e d  e j   n  d Z e e j d d   d k re j d Z n  e j e  Z e d e e   e d  e e j   e d! e e j   e d" e e j   e d# d$ d% e e j     e d k rre j! e j"  Z e d& e j# j$ e  e f  e j% e e j  qrn  d S)+    )print_function)Image	ImageFileNc             C   sZ   y( t  |   } |  | d k r# d Sd SWn+ t k
 r@ d SYn t k
 rU d SYn Xd  S)Nr      )int
ValueErrorOverflowError)fi r   J/var/www/dbchiro/venv/lib/python3.4/site-packages/PIL/SpiderImagePlugin.pyisInt,   s    r   r                  c             C   s   d
 |  } x7 d d d d d d d g D] } t  | |  s& d	 Sq& Wt | d  } | t k rd d	 St | d  } t | d  } t | d  } | | | k r d	 S| S)Nc   r         r      r      r   )r   )r   r   iforms)thr
   iformlabreclabbytlenbytr   r   r   isSpiderHeader@   s    
"r   c          	   C   sv   t  |  d   } | j d  } Wd  QXt j d |  } t |  } | d k rr t j d |  } t |  } n  | S)Nrb\   z>23fr   z<23f)openreadstructunpackr   )filenamefpr	   r   hdrlenr   r   r   isSpiderImageU   s    r)   c               @   s   e  Z d  Z d Z d Z d Z d d   Z e d d    Z e d d	    Z	 d
 d   Z
 d d   Z d d d  Z d d   Z d S)SpiderImageFileZSPIDERzSpider 2D imageFc             C   s  d } |  j  j |  } y| d |  _ t j d |  } t |  } | d k rx d |  _ t j d |  } t |  } n  | d k r t d   n  Wn! t j k
 r t d   Yn Xd | } t | d	  } | d k r t d
   n  t | d  t | d  f |  _	 t | d  |  _
 t | d  |  _ |  j
 d k rf|  j d k rf| } d |  _ n |  j
 d k r|  j d k rt | d  t | d  d |  _ | |  _ t | d  |  _ | d } d |  _ nC |  j
 d k r|  j d k r| |  j } d |  _
 n t d   |  j r3d |  _ n	 d |  _ d |  _ d d |  j	 | |  j d d f f g |  _ |  j  |  _ d  S)N      r   z>27fr   z<27fznot a valid Spider filer   r   znot a Spider 2D imager   r         z inconsistent stack header valueszF;32BFzF;32FFrawl   )r   )r   r   )r'   r#   Z	bigendianr$   r%   r   SyntaxErrorerrorr   sizeistack	imgnumber_nimagesimgbytesr(   	stkoffsetrawmodemodeZtile_SpiderImageFile__fp)selfnr	   r   r(   r   r   offsetr   r   r   _openf   sR    		
#%	
			zSpiderImageFile._openc             C   s   |  j  S)N)r7   )r=   r   r   r   n_frames   s    zSpiderImageFile.n_framesc             C   s   |  j  d k S)Nr   )r7   )r=   r   r   r   is_animated   s    zSpiderImageFile.is_animatedc             C   s"   |  j  d k  r d S|  j  d Sd  S)Nr   r   )r6   )r=   r   r   r   tell   s    zSpiderImageFile.tellc             C   s|   |  j  d k r t d   n  |  j |  s1 d  S|  j | |  j |  j |  _ |  j |  _ |  j j |  j  |  j	   d  S)Nr   z#attempt to seek in a non-stack file)
r5   EOFErrorZ_seek_checkr(   r8   r9   r<   r'   seekr@   )r=   framer   r   r   rE      s    zSpiderImageFile.seek   c             C   sb   |  j    \ } } d } | | k r5 | | | } n  | | } |  j | | d d   j d  S)Nr   c             S   s   |  | | S)Nr   )r
   mbr   r   r   <lambda>   s    z.SpiderImageFile.convert2byte.<locals>.<lambda>L)
getextremaZpointconvert)r=   depthZminimumZmaximumrH   rI   r   r   r   convert2byte   s    zSpiderImageFile.convert2bytec             C   s)   d d l  m } | j |  j   d d S)Nr   )ImageTkZpalette   )PILrP   Z
PhotoImagerO   )r=   rP   r   r   r   tkPhotoImage   s    zSpiderImageFile.tkPhotoImageN)__name__
__module____qualname__formatZformat_descriptionZ!_close_exclusive_fp_after_loadingr@   propertyrA   rB   rC   rE   rO   rS   r   r   r   r   r*   `   s   9	r*   c          
   C   s   |  d k s t  |   d k  r" d Sg  } x |  D] } t j j |  s[ t d |  q/ n  y t j |  j   } Wn( t |  s t | d  n  w/ Yn X| | j	 d <| j
 |  q/ W| S)z2 create a list of Image.images for use in montage Nr   zunable to find %sz is not a Spider image filer&   )lenospathexistsprintr   r"   rO   r)   infoappend)filelistZimglistZimgimr   r   r   loadImageSeries   s     rb   c             C   sO  |  j  \ } } | d } d | } d | d k r@ | d 7} n  | | } g  } t | d  } x! t |  D] } | j d  qm Wt |  d k  r g  Sd | d <t |  | d <d | d	 <t |  | d
 <t |  | d <t |  | d <t |  | d <| d d   } | j d  g  }	 x' | D] }
 |	 j t j d |
   q(W|	 S)Nr,   i   r   r   g        r   g      ?r   r   r   r   r   r	   )r4   r   ranger_   rY   floatr$   pack)ra   ZnsamZnrowr   r   r   hdrZnvaluesr
   Zhdrstrvr   r   r   makeSpiderHeader   s2    




rh   c          	   C   s   |  j  d d k r% |  j d  }  n  t |   } t |  d k  rR t d   n  | j |  d } t j |  | d d |  j d | d d f f g  d  S)	Nr   r/   rQ   zError creating Spider headerzF;32NFr0   r   )r   r   )	r;   rM   rh   rY   IOError
writelinesr   _saver4   )ra   r'   r&   rf   r:   r   r   r   rk     s    rk   c             C   s=   t  j j |  d } t j t j |  t |  | |  d  S)Nr   )rZ   r[   splitextr   Zregister_extensionr*   rW   rk   )ra   r'   r&   extr   r   r   _save_spider  s    rn   __main__z6Syntax: python SpiderImagePlugin.py [infile] [outfile]z$input image must be in Spider format r   zimage: zformat: zsize: zmode: z
max, min: end z%saving a flipped version of %s as %s iiii)&
__future__r   rR   r   r   rZ   r$   sysr   r   r   r)   r*   rb   rh   rk   rn   Zregister_openrW   Zregister_saverT   argvr]   exitr&   outfilerY   r"   ra   strr4   r;   rL   Z	transposeZFLIP_LEFT_RIGHTr[   basenamesaver   r   r   r   <module>$   sN   k"

