o
    e$                     @  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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 reed e  ejd Zeesved e  eeiZ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   dS W d   dS 1 sw   Y  dS dS )$    )annotationsN   )Image	ImageFilec              	   C  s:   zt | }| | dkrW dS W dS  ttfy   Y dS w )Nr   r   )int
ValueErrorOverflowError)fi r   H/var/www/html/venv/lib/python3.10/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r8d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w   Y  td|}t|}|dkr2t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 )SpiderImageFileSPIDERzSpider 2D imageFc           
   
   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   _opend   s^   

zSpiderImageFile._openc                 C  s   | j S Nr9   rA   r   r   r   n_frames   s   zSpiderImageFile.n_framesc                 C  s
   | j dkS Nr   rH   rI   r   r   r   is_animated   s   
zSpiderImageFile.is_animatedc                 C  s   | j dk rdS | j d S )Nr   r   )r8   rI   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)
r7   EOFError_seek_checkr'   r:   r;   r@   r&   seekrF   )rA   framerC   r   r   r   rP      s   

zSpiderImageFile.seek   c                 C  sH   |   \}}d}||kr|||  }| | }| ||fdddS )Nr   c                 S  s   | | | S rG   r   )r
   mbr   r   r   <lambda>   s    z.SpiderImageFile.convert2byte.<locals>.<lambda>L)
getextremapointconvert)rA   depthminimummaximumrS   rT   r   r   r   convert2byte   s   
zSpiderImageFile.convert2bytec                 C  s   ddl m} |j|  ddS )Nr   )ImageTk   )palette) r^   
PhotoImager]   )rA   r^   r   r   r   tkPhotoImage   s   zSpiderImageFile.tkPhotoImageN)rR   )__name__
__module____qualname__formatformat_description!_close_exclusive_fp_after_loadingrF   propertyrJ   rL   rM   rP   r]   rc   r   r   r   r   r)   _   s    ;


	r)   c              	   C  s   | du s
t | dk rdS g }| D ]I}tj|s td|  qzt|}| }W d   n1 s5w   Y  W n tyN   t	|sLt|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!   r]   	Exceptionr(   infoappend)filelistimglistimgimr   r   r   loadImageSeries   s(   

rw   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 )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   floatrr   )rv   nsamnrowr   r   r   nvalueshdrr   r   r   makeSpiderHeader   s*   


r   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   r0   r_   zError creating Spider headerzF;32NFr1   r2   r   )	moderY   r   rk   OSError
writelinesr   _saver>   )rv   r&   r%   r   rC   r<   r   r   r   r     s   

(r   c                 C  s.   t j|d }ttj| t| || d S rK   )rl   rm   splitextr   register_extensionr)   rg   r   )rv   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 rG   )'
__future__r   rl   r#   sysra   r   r   r   r   r   r(   r)   rw   r   r   r   register_openrg   register_saverd   rk   argvro   exitr%   r!   rv   strr>   r   rW   outfile	transpose	TransposeFLIP_LEFT_RIGHTrm   basenamesaver   r   r   r   <module>   sX   "	
o


"