î
úÙ X?%  ã               @   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   úR/home/ubuntu/projects/ifolica/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)Néc   r   é   é   r   é   r   é   r   )r   )r   r   Úiforms)ÚtÚhr
   ÚiformÚlabrecÚlabbytÚlenbytr   r   r   ÚisSpiderHeader@   s    
"r   c             C   sw   t  |  d ƒ } | j d ƒ } | j ƒ  t j d | ƒ } t | ƒ } | d k rs t j d | ƒ } t | ƒ } n  | S)NÚrbé\   z>23fr   z<23f)ÚopenÚreadÚcloseÚstructÚunpackr   )ÚfilenameÚfpr	   r   Úhdrlenr   r   r   ÚisSpiderImageU   s    
r*   c               @   s   e  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 imagec             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Úrawél   )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)r8   )r>   r   r   r   Ún_framesŸ   s    zSpiderImageFile.n_framesc             C   s   |  j  d k S)Nr   )r8   )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   )r7   )r>   r   r   r   Útell¨   s    zSpiderImageFile.tellc             C   s‡   |  j  d k r t d ƒ ‚ n  | |  j k r< t d ƒ ‚ n  |  j | |  j |  j |  _ |  j |  _ |  j j |  j ƒ |  j	 ƒ  d  S)Nr   z#attempt to seek in a non-stack filez attempt to seek past end of file)
r6   ÚEOFErrorr8   r)   r9   r:   r=   r(   ÚseekrA   )r>   Úframer   r   r   rF   ®   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maximumrI   rJ   r   r   r   Úconvert2byte¹   s    zSpiderImageFile.convert2bytec             C   s)   d d l  m } | j |  j ƒ  d d ƒS)Nr   )ÚImageTkZpaletteé   )ÚPILrQ   Z
PhotoImagerP   )r>   rQ   r   r   r   ÚtkPhotoImageÂ   s    zSpiderImageFile.tkPhotoImageN)Ú__name__Ú
__module__Ú__qualname__ÚformatZformat_descriptionrA   ÚpropertyrB   rC   rD   rF   rP   rT   r   r   r   r   r+   a   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"   rP   r*   ÚinfoÚappend)ÚfilelistZimglistZimgÚimr   r   r   ÚloadImageSeriesË   s     rc   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	   )r5   r   Úranger`   rZ   Úfloatr%   Úpack)rb   ZnsamZnrowr   r   r   ÚhdrZnvaluesr
   ZhdrstrÚvr   r   r   ÚmakeSpiderHeaderã   s2    




ri   c             C   sÓ   |  j  d d k r% |  j d ƒ }  n  t |  ƒ } t | ƒ d k  rR t d ƒ ‚ n  y t | d ƒ } Wn t d | ƒ ‚ Yn X| j | ƒ d } t j |  | d d
 |  j	 d | d d	 f f g ƒ | j
 ƒ  d  S)Nr   r0   rR   zError creating Spider headerÚwbzUnable to open %s for writingzF;32NFr1   r   )r   r   )r<   rN   ri   rZ   ÚIOErrorr"   Ú
writelinesr   Ú_saver5   r$   )rb   r(   r'   rg   r;   r   r   r   rm     s    2rm   c             C   s=   t  j j | ƒ d } t j t j | ƒ t |  | | ƒ d  S)Nr   )r[   r\   Úsplitextr   Zregister_extensionr+   rX   rm   )rb   r(   r'   Úextr   r   r   Ú_save_spider  s    rp   Ú__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 iõÿÿÿiôÿÿÿiëÿÿÿiêÿÿÿ)&Ú
__future__r   rS   r   r   r[   r%   Úsysr   r   r   r*   r+   rc   ri   rm   rp   Zregister_openrX   Zregister_saverU   Úargvr^   Úexitr'   ÚoutfilerZ   r"   rb   Ústrr5   r<   rM   Z	transposeZFLIP_LEFT_RIGHTr\   ÚbasenameÚsaver   r   r   r   Ú<module>$   sN   j"

