U
    &^$                     @   s  d dl Z d dlZd dlZd dlmZm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 )&    N)Image	ImageFilec              	   C   sD   z$t | }| | dkrW dS W dS W n ttfk
r>   Y dS X d S )Nr      )int
ValueErrorOverflowError)fi r
   9/tmp/pip-install-a1j0c_p1/Pillow/PIL/SpiderImagePlugin.pyisInt*   s    
r   r      iiiic                 C   st   d|  }dD ]}t || s dS qt|d }|tkr<dS t|d }t|d }t|d }||| krpd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 5 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   isSpiderImageR   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 |}zPd| _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 filer   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   _sizeistack	imgnumber_nimagesimgbytesr&   	stkoffsetrawmodemodesizeZtile_SpiderImageFile__fp)selfnr   r   r&   r   r   offsetr
   r
   r   _openc   sP    
zSpiderImageFile._openc                 C   s   | j S Nr6   r=   r
   r
   r   n_frames   s    zSpiderImageFile.n_framesc                 C   s
   | j dkS Nr   rB   rC   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   )r5   rC   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)
r4   EOFErrorZ_seek_checkr&   r7   r8   r<   r%   seekr@   )r=   framer
   r
   r   rI      s    

zSpiderImageFile.seek   c                 C   sH   |   \}}d}||kr$|||  }| | }| ||fdddS )Nr   c                 S   s   | | | S rA   r
   )r	   mbr
   r
   r   <lambda>       z.SpiderImageFile.convert2byte.<locals>.<lambda>L)
getextremaZpointconvert)r=   depthZminimummaximumrL   rM   r
   r
   r   convert2byte   s    
zSpiderImageFile.convert2bytec                 C   s   ddl m} |j|  ddS )Nr   )ImageTk   )Zpalette)PILrV   Z
PhotoImagerU   )r=   rV   r
   r
   r   tkPhotoImage   s    zSpiderImageFile.tkPhotoImagec                 C   sB   z4z| j | jkr| j   W n tk
r0   Y nX W 5 d | _ X d S rA   )r<   r%   closeAttributeErrorrC   r
   r
   r   
_close__fp   s    
zSpiderImageFile._close__fpN)rK   )__name__
__module____qualname__formatformat_descriptionZ!_close_exclusive_fp_after_loadingr@   propertyrD   rF   rG   rI   rU   rY   r\   r
   r
   r
   r   r(   ]   s   7


	r(   c              
   C   s   | dkst | dk rdS g }| D ]}tj|s>td|  q z"t|}| }W 5 Q R X W n, tk
r   t	|st|d  Y q Y nX ||j
d< || q |S )zJcreate a list of :py:class:`~PIL.Image.Image` objects for use in a montageNr   zunable to find %sz is not a Spider image filer$   )lenospathexistsprintr   r    rU   	Exceptionr'   infoappend)filelistZimglistimgimr
   r
   r   loadImageSeries   s"    

rn   c                 C   s   | j \}}|d }td| }d| dkr2|d7 }|| }g }t|d }t|D ]}|d qRt|dk rrg S d|d< t||d< d|d	< t||d
< t||d< t||d< t||d< |dd  }|d g }	|D ]}
|	td|
 q|	S )Nr,   i   r   r   g        r   g      ?r   r   r   r   r   r   )r;   r   rangerj   rc   floatr"   pack)rm   ZnsamZnrowr   r   r   hdrZnvaluesr	   Zhdrstrvr
   r
   r   makeSpiderHeader   s2    

rt   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.   rW   zError creating Spider headerzF;32NFr/   r0   r   )	r:   rR   rt   rc   OSError
writelinesr   _saver;   )rm   r%   r$   rr   r9   r
   r
   r   rw     s    

rw   c                 C   s.   t j|d }ttj| t| || d S rE   )rd   re   splitextr   Zregister_extensionr(   r`   rw   )rm   r%   r$   extr
   r
   r   _save_spider  s    rz   __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)$rd   r"   sysrX   r   r   r   r   r   r'   r(   rn   rt   rw   rz   Zregister_openr`   Zregister_saver]   rc   argvrg   exitr$   r    rm   strr;   r:   rQ   outfileZ	transposeZFLIP_LEFT_RIGHTre   basenamesaver
   r
   r
   r   <module>#   sL   	s
"




