3

Z{$                 @   s  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G d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reejdk red ej  ejd Zee sed ej  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ejdkrejd Z ej!ej"Zed%ej#j$ee f  ej%e ej dS )+    )print_function)Image	ImageFileNc             C   s>   y t | }| | dkrdS dS W n ttfk
r8   dS X d S )Nr      )int
ValueErrorOverflowError)fi r   7/usr/lib/python3/dist-packages/PIL/SpiderImagePlugin.pyisInt,   s    r   r                  c             C   sv   d
|  }xdD ]}t || sd	S qW t|d }|tkr>d	S t|d }t|d }t|d }||| krrd	S |S )Nc   r         r      r      r   )r   )r   r   r   r   r   r   r   )r   r   iforms)thr
   iformlabreclabbytlenbytr   r   r   isSpiderHeader?   s    
r   c          
   C   sT   t | d}|jd}W d Q R X tjd|}t|}|dkrPtjd|}t|}|S )Nrb\   z>23fr   z<23f)openreadstructunpackr   )filenamefpr	   r   hdrlenr   r   r   isSpiderImageT   s    r)   c               @   sZ   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|}yPd| _tjd|}t|}|dkrNd| _tjd|}t|}|dkr^tdW n tjk
r~   tdY nX d| }t|d	 }|dkrtd
t|d t|d f| _	t|d | _
t|d | _| j
dko| jdk r|}d| _n| j
dkrV| jdkrVt|d t|d  d | _|| _t|d | _|d }d| _n2| j
dkr| jdkr|| j }d| _
ntd| jrd| _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   _opene   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 S d S )Nr   r   )r6   )r=   r   r   r   tell   s    
zSpiderImageFile.tellc             C   sZ   | j dkrtd| j|s 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   sH   | j  \}}d}||kr$|||  }| | }| j||f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=   ZdepthZminimumZmaximumrH   rI   r   r   r   convert2byte   s    
zSpiderImageFile.convert2bytec             C   s   ddl m} |j| j ddS )Nr   )ImageTk   )Zpalette)PILrO   Z
PhotoImagerN   )r=   rO   r   r   r   tkPhotoImage   s    zSpiderImageFile.tkPhotoImageN)rG   )__name__
__module____qualname__formatZformat_descriptionZ!_close_exclusive_fp_after_loadingr@   propertyrA   rB   rC   rE   rN   rR   r   r   r   r   r*   _   s   9
	r*   c          
   C   s   | dkst | dk rdS g }xp| D ]h}tjj|s@td|  q"ytj|j }W n"   t|snt|d  w"Y n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"   rN   r)   infoappend)ZfilelistZimglistZimgimr   r   r   loadImageSeries   s     

r`   c             C   s   | j \}}|d }d| }d| dkr.|d7 }|| }g }t|d }xt|D ]}|jd qPW t|dk rrg S d|d< t||d< d|d	< t||d
< t||d< t||d< t||d< |dd  }|jd g }	x|D ]}
|	jtjd|
 qW |	S )Nr,   i   r   r   g        r   g      ?r   r   r   r   r   r	   )r4   r   ranger^   rX   floatr$   Zpack)r_   ZnsamZnrowr   r   r   hdrZnvaluesr
   Zhdrstrvr   r   r   makeSpiderHeader   s2    


re   c          	   C   sj   | j d dkr| jd} t| }t|dk r4td|j| d}tj| |dd| j d|ddffg d S )	Nr   r/   rP   zError creating Spider headerzF;32NFr0   r   )r   r   )	r;   rM   re   rX   IOError
writelinesr   _saver4   )r_   r'   r&   rc   r:   r   r   r   rh     s    

rh   c             C   s.   t jj|d }tjtj| t| || d S )Nr   )rY   rZ   splitextr   Zregister_extensionr*   rV   rh   )r_   r'   r&   Zextr   r   r   _save_spider  s    rj   __main__r   z6Syntax: python SpiderImagePlugin.py [infile] [outfile]z$input image must be in Spider formatzimage: zformat: zsize: zmode: z
max, min:  )endz%saving a flipped version of %s as %s iiii)N)&Z
__future__r   rQ   r   r   rY   r$   sysr   r   r   r)   r*   r`   re   rh   rj   Zregister_openrV   Zregister_saverS   rX   argvr\   exitr&   r"   r_   strr4   r;   rL   ZoutfileZ	transposeZFLIP_LEFT_RIGHTrZ   basenameZsaver   r   r   r   <module>$   sJ   k
"	




