U
    Evf$                  	   @  s  d dl mZ 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"j#Zed%ej$%e d&e  d# e&e ej W 5 Q R X dS )(    )annotationsN   )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   r   )int
ValueErrorOverflowError)fi r   9/tmp/pip-unpacked-wheel-ciywl2yd/PIL/SpiderImagePlugin.pyisInt,   s    
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   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 |}zTd| _td|}t|}|dkrNd| _td|}t|}|dkrbd}t|W n2 tjk
r } zd}t||W 5 d }~X Y nX d| }t|d }|dkrd	}t|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| _n6| j
dkr| jdkr|| j }	d| _
nd}t|| 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_fp)
selfnr	   r   r'   msger   r   offsetr   r   r   _opend   sX    
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   rE   rF   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   rF   r   r   r   tell   s    
zSpiderImageFile.tellc                 C  s^   | j dkrd}t|| |s$d S | 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&   seekrC   )r>   framer@   r   r   r   rL      s    

zSpiderImageFile.seek   c                 C  sH   |   \}}d}||kr$|||  }| | }| ||fdddS )Nr   c                 S  s   | | | S rD   r   )r
   mbr   r   r   <lambda>       z.SpiderImageFile.convert2byte.<locals>.<lambda>L)
getextremaZpointconvert)r>   depthZminimummaximumrO   rP   r   r   r   convert2byte   s    
zSpiderImageFile.convert2bytec                 C  s   ddl m} |j|  ddS )Nr   )ImageTk   )Zpalette) rY   Z
PhotoImagerX   )r>   rY   r   r   r   tkPhotoImage   s    zSpiderImageFile.tkPhotoImageN)rN   )__name__
__module____qualname__formatformat_descriptionZ!_close_exclusive_fp_after_loadingrC   propertyrG   rI   rJ   rL   rX   r\   r   r   r   r   r)   _   s   ;


	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 z is not a Spider image filer%   )lenospathexistsprintr   r!   rX   	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 }|| }t|d }|dk rRg S dg| }d|d< t||d< t||d	< d|d
< t||d< t||d< t||d< t||d< |dd  }|d dd |D S )Nr-   i   r   r   r   g        g      ?r   r   r   r   r   r   c                 S  s   g | ]}t d |qS )r	   )r#   pack).0vr   r   r   
<listcomp>  s     z$makeSpiderHeader.<locals>.<listcomp>)r<   r   floatrj   )rm   ZnsamZnrowr   r   r   Znvalueshdrr   r   r   makeSpiderHeader   s*    


ru   c              
   C  sn   | j d dkr| d} t| }t|dk r8d}t||| d}t| |dd| j d|ddffg d S )	Nr   r/   rZ   zError creating Spider headerzF;32NFr0   r1   r   )	moderU   ru   rc   OSError
writelinesr   _saver<   )rm   r&   r%   rt   r@   r:   r   r   r   ry     s    

ry   c                 C  s.   t j|d }ttj| t| || d S rH   )rd   re   splitextr   Zregister_extensionr)   r`   ry   )rm   r&   r%   extr   r   r   _save_spider  s    r|   __main__r   z7Syntax: python3 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 z as )N)'
__future__r   rd   r#   sysr[   r   r   r   r   r   r(   r)   rn   ru   ry   r|   Zregister_openr`   Zregister_saver]   rc   argvrg   exitr%   r!   rm   strr<   rv   rT   outfileZ	transposeZ	TransposeZFLIP_LEFT_RIGHTre   basenamesaver   r   r   r   <module>#   sJ   	o




