3

h?%                 @   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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 d%e d" ej#ee
j W dQ R X dS )+    N)Image	ImageFilec             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
   U/var/www/html/enquirykeeper_venv/lib/python3.6/site-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   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 j|}yPd| _tjd|}t|}|dkrNd| _tjd|}t|}|dkr^tdW n. tjk
r } ztd|W Y d d }~X 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rh| jdkrht|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modesizeZtile_SpiderImageFile__fp)	selfnr   r   r'   er   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   )r6   )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   )r5   )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)
r4   EOFErrorZ_seek_checkr'   r7   r8   r<   r&   seekrA   )r=   framer
   r
   r   rF      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=   depthZminimummaximumrI   rJ   r
   r
   r   convert2byte   s    
zSpiderImageFile.convert2bytec             C   s   ddl m} |j| j ddS )Nr   )ImageTk   )Zpalette)PILrR   Z
PhotoImagerQ   )r=   rR   r
   r
   r   tkPhotoImage   s    zSpiderImageFile.tkPhotoImagec             C   sB   z4y| j | jkr| j 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)rH   )__name__
__module____qualname__formatformat_descriptionZ!_close_exclusive_fp_after_loadingrA   propertyrB   rC   rD   rF   rQ   rU   rX   r
   r
   r
   r   r)   ]   s   7
	r)   c             C   s   | dkst | dk rdS g }x| D ]}tjj|sBtd|  q"y"tj|}|j }W dQ R X W n* tk
r   t	|st|d  w"Y nX ||j
d< |j| q"W |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!   rQ   	Exceptionr(   infoappend)filelistZimglistimgimr
   r
   r   loadImageSeries   s"    

rj   c             C   s   | j \}}|d }td| }d| dkr2|d7 }|| }g }t|d }xt|D ]}|jd qTW t|dk rvg 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   )r;   r   rangerf   r_   floatr#   pack)ri   ZnsamZnrowr   r   r   hdrZnvaluesr	   Zhdrstrvr
   r
   r   makeSpiderHeader   s2    


rp   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.   rS   zError creating Spider headerzF;32NFr/   r   )r   r   )	r:   rN   rp   r_   OSError
writelinesr   _saver;   )ri   r&   r%   rn   r9   r
   r
   r   rs     s    

rs   c             C   s.   t jj|d }tjtj| t| || d S )Nr   )r`   ra   splitextr   Zregister_extensionr)   r\   rs   )ri   r&   r%   extr
   r
   r   _save_spider  s    rv   __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 iiii)N)$r`   r#   sysrT   r   r   r   r   r   r(   r)   rj   rp   rs   rv   Zregister_openr\   Zregister_saverY   r_   argvrc   exitr%   r!   ri   strr;   r:   rM   outfileZ	transposeZFLIP_LEFT_RIGHTra   basenamesaver
   r
   r
   r   <module>#   sF   	s
"



