a
    h	(                     @  s0  d dl mZ d dlZd dlZd dlZd dlmZmZmZ ddl	m
Z
mZ ddlmZ dZdd	d
ddZg dZdd	dddZdd	dddZG dd dejZd7dddddZdddd d!Zdd"d#d$d%d&d'Zdd"d#d$d%d(d)Ze
eje e
eje ed*kr,eejd+k r2ed, e  ejd Z ee sVed- e  e
!e Z"ed.e"  ed/e"j  ed0e"j#  ed1e"j$  ed2d3d4 ee"%  eejd+krejd+ Z&e"'e
j(j)Z"ed5ej*+e  d6e& d3 e",e&ej W d   n1 s"0    Y  dS )8    )annotationsN)IOAnycast   )Image	ImageFile)DeferredErrorFr   int)freturnc              	   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   )r
   
ValueErrorOverflowError)r   i r   C/var/www/auris/lib/python3.9/site-packages/PIL/SpiderImagePlugin.pyisInt0   s    
r   )r      iiiiztuple[float, ...])tr   c                 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)r   hr   iformlabreclabbytlenbytr   r   r   isSpiderHeaderD   s    r#   str)filenamer   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#   )r%   fpr   r   hdrlenr   r   r   isSpiderImageX   s    (r.   c                   @  s   e Zd ZdZdZdZddddZeddd	d
ZeddddZ	ddddZ
dddddZddddddZerddlmZ ddddZdS )SpiderImageFileZSPIDERzSpider 2D imageFNone)r   c           
   
   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| _tdd| j |	| j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_moder   _TilesizeZtile_fp)
selfnr   r   r-   msger   r   offsetr   r   r   _openh   sX     
zSpiderImageFile._openr
   c                 C  s   | j S Nr>   rF   r   r   r   n_frames   s    zSpiderImageFile.n_framesboolc                 C  s
   | j dkS Nr   rM   rN   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   )r=   rN   r   r   r   tell   s    
zSpiderImageFile.tell)framer   c                 C  sr   | j dkrd}t|| |s$d S t| jtr8| jj| j|| j| j   | _	| j| _
| j
| j	 |   d S )Nr   z#attempt to seek in a non-stack file)r<   EOFErrorZ_seek_check
isinstancerE   r	   exr-   r?   r@   r,   seekrK   )rF   rT   rH   r   r   r   rX      s    

zSpiderImageFile.seek   Image.Image)depthr   c                   sl   |   }t|d tsJ ttttf |\}}d||krH|||   |  |  fdddS )Nr   r   c                   s   |    S rL   r   )r   bmr   r   <lambda>       z.SpiderImageFile.convert2byte.<locals>.<lambda>L)
getextremarV   floatr   tupleZpointconvert)rF   r[   ZextremaZminimummaximumr   r\   r   convert2byte   s    
zSpiderImageFile.convert2byter   ImageTkzImageTk.PhotoImagec                 C  s   ddl m} |j|  ddS )Nr   rh      )Zpalette) ri   Z
PhotoImagerg   )rF   ri   r   r   r   tkPhotoImage   s    zSpiderImageFile.tkPhotoImageN)rY   )__name__
__module____qualname__formatformat_descriptionZ!_close_exclusive_fp_after_loadingrK   propertyrO   rR   rS   rX   rg   TYPE_CHECKINGrk   ri   rl   r   r   r   r   r/   c   s   ;
r/   zlist[str] | Nonezlist[Image.Image] | None)filelistr   c              	   C  s   | du st | dk rdS g }| D ]}tj|s@td|  q zDt|&}t|ts\J |	 }W d   n1 sx0    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(   rV   r/   rg   	Exceptionr.   infoappend)rt   Z	byte_imgsimgimZbyte_imr   r   r   loadImageSeries   s$    *

r   rZ   zlist[bytes])r~   r   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 )Nr4   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>  r`   z$makeSpiderHeader.<locals>.<listcomp>)rD   r
   rc   r|   )r~   ZnsamZnrowr"   r    r!   Znvalueshdrr   r   r   makeSpiderHeader   s*    


r   z	IO[bytes]zstr | bytesr0   )r~   r,   r%   r   c              
   C  sh   | j dkr| d} t| }t|dk r4d}t||| d}t| |tdd| j	 d|g d S )Nr6   rj   zError creating Spider headerzF;32NFr7   r8   r   )
modere   r   ru   OSError
writelinesr   _saverC   rD   )r~   r,   r%   r   rH   rA   r   r   r   r     s    


r   c                 C  sD   t j|d }t|tr"| n|}ttj	| t
| || d S rQ   )rv   rw   splitextrV   bytesdecoder   Zregister_extensionr/   rp   r   )r~   r,   r%   Zfilename_ext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   rv   r*   systypingr   r   r   rk   r   r   Z_utilr	   rs   r   r   r#   r.   r/   r   r   r   r   Zregister_openrp   Zregister_saverm   ru   argvry   exitr%   r(   r~   rD   r   rb   outfileZ	transposeZ	TransposeZFLIP_LEFT_RIGHTrw   basenamesaver   r   r   r   <module>#   sT   	v



