B
    1\%                 @   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eje eeje edkreejdk red e  ejd Zeesed e  e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  eejdkrejd Z e!ej"Zed%ej#$ee f  e%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   4lib/python3.7/site-packages/PIL/SpiderImagePlugin.pyisInt,   s    r   r      iiiic             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 )N)c   )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}|d}W d Q R X td|}t|}|dkrPtd|}t|}|S )Nrb\   z>23fr   z<23f)openreadstructunpackr   )filenamefpr	   r   hdrlenr   r   r   isSpiderImageS   s    r'   c               @   sb   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d ZdS )SpiderImageFileZSPIDERzSpider 2D imageFc             C   s  d}| j |}yPd| _td|}t|}|dkrNd| _t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r| jdkr|}d| _n| j
dkrT| jdkrTt|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 )Nl   r   z>27fr   z<27fznot a valid Spider file)r   r   znot a Spider 2D imager   r               z inconsistent stack header valueszF;32BFzF;32FFraw)r   r   )r%   r!   Z	bigendianr"   r#   r   SyntaxErrorerrorr   Z_sizeistack	imgnumber_nimagesimgbytesr&   	stkoffsetrawmodemodesizeZtile_SpiderImageFile__fp)selfnr	   r   r&   r   r   offsetr   r   r   _opend   sR    
zSpiderImageFile._openc             C   s   | j S )N)r4   )r;   r   r   r   n_frames   s    zSpiderImageFile.n_framesc             C   s
   | j dkS )Nr   )r4   )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   )r3   )r;   r   r   r   tell   s    
zSpiderImageFile.tellc             C   sZ   | j dkrtd| |s d S | j|| j| j   | _| j| _| j| j | 	  d S )Nr   z#attempt to seek in a non-stack file)
r2   EOFErrorZ_seek_checkr&   r5   r6   r:   r%   seekr>   )r;   framer   r   r   rC      s    

zSpiderImageFile.seek   c             C   sH   |   \}}d}||kr$|||  }| | }| ||fdd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maximumrF   rG   r   r   r   convert2byte   s    
zSpiderImageFile.convert2bytec             C   s   ddl m} |j|  ddS )Nr   )ImageTk   )Zpalette)PILrM   Z
PhotoImagerL   )r;   rM   r   r   r   tkPhotoImage   s    zSpiderImageFile.tkPhotoImagec             C   sB   z4y| j | jkr| j   W n tk
r0   Y nX W d d | _ X d S )N)r:   r%   closeAttributeError)r;   r   r   r   
_close__fp   s    
zSpiderImageFile._close__fpN)rE   )__name__
__module____qualname__formatZformat_descriptionZ!_close_exclusive_fp_after_loadingr>   propertyr?   r@   rA   rC   rL   rP   rS   r   r   r   r   r(   ^   s   9
	r(   c          	   C   s   | dkst | dk rdS g }xx| D ]p}tj|s@td|  q"yt| }W n* tk
r|   t	|svt|d  w"Y nX ||j
d< || q"W |S )z0create a list of Image.images for use in montageNr   zunable to find %sz is not a Spider image filer$   )lenospathexistsprintr   r    rL   	Exceptionr'   infoappend)ZfilelistZimglistZimgimr   r   r   loadImageSeries   s     

rb   c             C   s   | j \}}|d }d| }d| dkr.|d7 }|| }g }t|d }xt|D ]}|d qPW t|dk rrg S d|d< t||d< d|d	< t||d
< t||d< t||d< t||d< |dd  }|d g }	x|D ]}
|	td|
 qW |	S )Nr,   i   r   r   g        r   g      ?r   r   r   r   r   r	   )r9   r   ranger`   rY   floatr"   Zpack)ra   ZnsamZnrowr   r   r   hdrZnvaluesr
   Zhdrstrvr   r   r   makeSpiderHeader   s2    


rg   c          
   C   sj   | j d dkr| d} t| }t|dk r4td|| d}t| |dd| j d|ddffg d S )	Nr   r.   rN   zError creating Spider headerzF;32NFr/   )r   r   r   )	r8   rK   rg   rY   IOError
writelinesr   _saver9   )ra   r%   r$   re   r7   r   r   r   rj     s    

rj   c             C   s.   t j|d }ttj| t| || d S )Nr   )rZ   r[   splitextr   Zregister_extensionr(   rW   rj   )ra   r%   r$   Zextr   r   r   _save_spider  s    rl   __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 )N)&Z
__future__r   rO   r   r   rZ   r"   sysr   r   r   r'   r(   rb   rg   rj   rl   Zregister_openrW   Zregister_saverT   rY   argvr]   exitr$   r    ra   strr9   r8   rJ   ZoutfileZ	transposeZFLIP_LEFT_RIGHTr[   basenameZsaver   r   r   r   <module>$   sJ   t
"	



