a
    Qh$                     @   s  d dl Z d dlZd dlZddlmZmZ dd Zg d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 d   n1 s0    Y  dS )#    N   )Image	ImageFilec              	   C   sB   z$t | }| | dkrW dS W dS W n ttfy<   Y dS 0 d S )Nr   r   )int
ValueErrorOverflowError)fi r
   N/var/www/sistema_ama/venv/lib/python3.9/site-packages/PIL/SpiderImagePlugin.pyisInt*   s    
r   )r      iiiic                 C   st   d|  }dD ]}t || s dS qt|d }|tv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   sh   t | d}|d}W d    n1 s*0    Y  td|}t|}|dkrdtd|}t|}|S )Nrb\   z>23fr   z<23f)openreadstructunpackr   )filenamefpr   r   hdrlenr
   r
   r   isSpiderImageR   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 n4 tjy } zd}t||W Y d }~n
d }~0 0 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rv| jdkrvt|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sizetile_fp)
selfnr   r   r&   msger   r   offsetr
   r
   r   _openb   sX     
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   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   )r5   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)
r4   EOFError_seek_checkr&   r7   r8   r=   r%   seekrC   )r>   framer@   r
   r
   r   rM      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)
getextremapointconvert)r>   depthminimummaximumrP   rQ   r
   r
   r   convert2byte   s    
zSpiderImageFile.convert2bytec                 C   s   ddl m} |j|  ddS )Nr   )ImageTk   )palette) r\   Z
PhotoImager[   )r>   r\   r
   r
   r   tkPhotoImage   s    zSpiderImageFile.tkPhotoImageN)rO   )__name__
__module____qualname__formatformat_description!_close_exclusive_fp_after_loadingrC   propertyrG   rI   rJ   rM   r[   r`   r
   r
   r
   r   r(   ]   s   ;


	r(   c              	   C   s   | du st | dk rdS g }| D ]}tj|s@td|  q z6t|}| }W d   n1 sj0    Y  W n* ty   t	|st|d  Y q Y n0 ||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    r[   	Exceptionr'   infoappend)filelistZimglistimgimr
   r
   r   loadImageSeries   s"    *

rs   c           	      C   s   | j \}}|d }td| }d| dkr2|d7 }|| }t|d }|dk rRg S g }t|D ]}|d q^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>  rS   z$makeSpiderHeader.<locals>.<listcomp>)r;   r   rangero   float)	rr   Znsamnrowr   r   r   Znvalueshdrr	   r
   r
   r   makeSpiderHeader   s.    

r|   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.   r]   zError creating Spider headerzF;32NFr/   r0   r   )	moderW   r|   rh   OSError
writelinesr   _saver;   )rr   r%   r$   r{   r@   r9   r
   r
   r   r     s    

r   c                 C   s.   t j|d }ttj| t| || d S rH   )ri   rj   splitextr   register_extensionr(   rd   r   )rr   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)%ri   r"   sysr_   r   r   r   r   r   r'   r(   rs   r|   r   r   register_openrd   register_savera   rh   argvrl   exitr$   r    rr   strr;   r}   rU   outfile	transpose	TransposeFLIP_LEFT_RIGHTrj   basenamesaver
   r
   r
   r   <module>#   sL   	o
 



