o
    fF'                     @  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mZm	Z	m
Z
 ddlmZmZ d6d
dZg dZd7ddZd8ddZG dd dejZd9d:ddZd;dd Zd<d%d&Zd<d'd(Zeeje eeje ed)kreejd*k rzed+ e  ejd Zeesed, e  e eeZ!ed-e!  ed.e!j  ed/e!j"  ed0e!j#  ed1d2d3 ee!$  eejd*krejd* Z%e!&ej'j(Z!ed4ej)*e d5e% d2 e!+e%ej W d   dS W d   dS 1 sw   Y  dS dS )=    )annotationsN)IOTYPE_CHECKINGAnyTuplecast   )Image	ImageFilefr   returnintc              	   C  s:   zt | }| | dkrW dS W dS  ttfy   Y dS w )Nr   r   )r   
ValueErrorOverflowError)r   i r   N/home/ubuntu/webapp/venv/lib/python3.10/site-packages/PIL/SpiderImagePlugin.pyisInt-   s   r   )r      iiiittuple[float, ...]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r8dS |S )Nc   )r                     r   r   r   r   r   )r   r   iforms)r   hr   iformlabreclabbytlenbytr   r   r   isSpiderHeaderA   s   r%   filenamestrc                 C  sh   t | d}|d}W d    n1 sw   Y  td|}t|}|dkr2td|}t|}|S )Nrb\   z>23fr   z<23f)openreadstructunpackr%   )r&   fpr   r   hdrlenr   r   r   isSpiderImageU   s   r0   c                   @  sx   e Zd ZdZdZdZdddZedd	d
Zed ddZ	dddZ
d!ddZd"d#ddZer5ddlmZ d$ddZdS )%SpiderImageFileSPIDERzSpider 2D imageFr   Nonec           
   
   C  s  d}| j |}z*d| _td|}t|}|dkr'd| _td|}t|}|dkr1d}t|W n tjyF } zd}t||d }~ww d| }t|d }|dkr[d	}t|t|d
 t|d f| _	t|d | _
t|d | _| j
dkr| jdkr|}	d| _nD| j
dkr| jdkrt|d
 t|d  d | _|| _t|d | _|d }	d| _n| 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+   	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   _opene   s^   

zSpiderImageFile._openr   c                 C  s   | j S NrB   rJ   r   r   r   n_frames   s   zSpiderImageFile.n_framesboolc                 C  s
   | j dkS Nr   rQ   rR   r   r   r   is_animated   s   
zSpiderImageFile.is_animatedc                 C  s   | j dk rdS | j d S )Nr   r   )rA   rR   r   r   r   tell   s   

zSpiderImageFile.tellframec                 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)
r@   EOFError_seek_checkr/   rC   rD   rI   r.   seekrO   )rJ   rX   rL   r   r   r   r[      s   

zSpiderImageFile.seek   depthImage.Imagec                   sl   |   }t|d tsJ ttttf |\}}d||kr$|||   |  |  fdddS )Nr   r   c                   s   |    S rP   r   )r   bmr   r   <lambda>   s    z.SpiderImageFile.convert2byte.<locals>.<lambda>L)
getextrema
isinstancefloatr   r   pointconvert)rJ   r]   extremaminimummaximumr   r_   r   convert2byte   s   
zSpiderImageFile.convert2byter   ImageTkImageTk.PhotoImagec                 C  s   ddl m} |j|  ddS )Nr   rm      )palette) rn   
PhotoImagerl   )rJ   rn   r   r   r   tkPhotoImage   s   zSpiderImageFile.tkPhotoImageN)r   r3   )r   r   )r   rT   )rX   r   r   r3   )r\   )r]   r   r   r^   )r   ro   )__name__
__module____qualname__formatformat_description!_close_exclusive_fp_after_loadingrO   propertyrS   rV   rW   r[   rl   r   rr   rn   rt   r   r   r   r   r1   `   s    
;


r1   filelistlist[str] | Nonelist[SpiderImageFile] | Nonec              	   C  s   | du s
t | dk rdS g }| D ]J}tj|s td|  qzt|}| }W d   n1 s5w   Y  W n tyO   t	|sMt| d Y qw ||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*   rl   	Exceptionr0   infoappend)r|   imglistimgimr   r   r   loadImageSeries   s(   

r   r   r^   list[bytes]c                 C  s   | j \}}|d }td| }d| dkr|d7 }|| }t|d }|dk r)g 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 )Nr7   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>)rG   r   rf   r   )r   nsamnrowr$   r"   r#   nvalueshdrr   r   r   makeSpiderHeader   s*   


r   r.   	IO[bytes]str | bytesr3   c              
   C  sn   | j d dkr| d} t| }t|dk rd}t||| d}t| |dd| j d|ddffg d S )	Nr   r9   rp   zError creating Spider headerzF;32NFr:   r;   r   )	moderh   r   r   OSError
writelinesr
   _saverG   )r   r.   r&   r   rL   rE   r   r   r   r     s   

(r   c                 C  sD   t j|d }t|tr| n|}ttj	| t
| || d S rU   )r   r   splitextre   bytesdecoder	   register_extensionr1   rx   r   )r   r.   r&   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 )r   r   r   r   )r   r   r   r   )r&   r'   r   r   rP   )r|   r}   r   r~   )r   r^   r   r   )r   r^   r.   r   r&   r   r   r3   ),
__future__r   r   r,   systypingr   r   r   r   r   rr   r	   r
   r   r   r%   r0   r1   r   r   r   r   register_openrx   register_saveru   r   argvr   exitr&   r*   r   rG   r   rd   outfile	transpose	TransposeFLIP_LEFT_RIGHTr   basenamesaver   r   r   r   <module>   sZ   "

	
t




"