o
    _#a?%                     @   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 r_ed e  ejd Ze	esped e  eehZ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 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 )#    N)Image	ImageFilec              	   C   s:   zt | }| | dkrW dS W dS  ttfy   Y dS w )Nr      )int
ValueErrorOverflowError)fi r
   7/usr/lib/python3/dist-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   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 )SpiderImageFileSPIDERzSpider 2D imageFc           	   
   C   s  d}| j |}z(d| _td|}t|}|dkr'd| _td|}t|}|dkr/tdW n tjyB } ztd|d }~ww d| }t|d }|dkrUtd	t|d
 t|d f| _	t|d | _
t|d | _| j
dkr| jdkr|}d| _nB| 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td| 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_SpiderImageFile__fp)	selfnr   r   r&   er   r   offsetr
   r
   r   _openc   sV   

zSpiderImageFile._openc                 C   s   | j S Nr8   r@   r
   r
   r   n_frames   s   zSpiderImageFile.n_framesc                 C   s
   | j dkS Nr   rF   rG   r
   r
   r   is_animated   s   
zSpiderImageFile.is_animatedc                 C   s   | j dk rdS | j d S )Nr   r   )r7   rG   r
   r
   r   tell   s   

zSpiderImageFile.tellc                 C   sZ   | j dkr	td| |sd S | j|| j| j   | _| j| _| j| j | 	  d S )Nr   z#attempt to seek in a non-stack file)
r6   EOFError_seek_checkr&   r9   r:   r?   r%   seekrD   )r@   framer
   r
   r   rN      s   

zSpiderImageFile.seek   c                 C   sH   |   \}}d}||kr|||  }| | }| ||fdddS )Nr   c                 S   s   | | | S rE   r
   )r	   mbr
   r
   r   <lambda>   s    z.SpiderImageFile.convert2byte.<locals>.<lambda>L)
getextremapointconvert)r@   depthminimummaximumrQ   rR   r
   r
   r   convert2byte   s   
zSpiderImageFile.convert2bytec                 C   s   ddl m} |j|  ddS )Nr   )ImageTk   )palette)PILr\   
PhotoImager[   )r@   r\   r
   r
   r   tkPhotoImage   s   zSpiderImageFile.tkPhotoImagec                 C   sP   z#z| j | jkr| j   W n	 ty   Y nw W d | _ d S W d | _ d S d | _ w rE   )r?   r%   closeAttributeErrorrG   r
   r
   r   
_close__fp   s   

zSpiderImageFile._close__fpN)rP   )__name__
__module____qualname__formatformat_description!_close_exclusive_fp_after_loadingrD   propertyrH   rJ   rK   rN   r[   ra   rd   r
   r
   r
   r   r(   ]   s    7


	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(   

rx   c                 C   s   | j \}}|d }td| }d| dkr|d7 }|| }g }t|d }t|D ]}|d q)t|dk r9g S d|d< t||d< d|d	< t||d
< t||d< t||d< t||d< |dd  }|d g }	|D ]}
|	td|
 qn|	S )Nr-   i   r   r   g        r   g      ?r   r   r   r   r   r   )r=   r   rangers   rl   floatr"   pack)rw   nsamnrowr   r   r   hdrnvaluesr	   hdrstrvr
   r
   r   makeSpiderHeader   s2   

r   c              
   C   sj   | j d dkr| d} t| }t|dk rtd|| d}t| |dd| j d|ddffg d S )	Nr   r/   r]   zError creating Spider headerzF;32NFr0   r1   r   )	r<   rW   r   rl   OSError
writelinesr   _saver=   )rw   r%   r$   r~   r;   r
   r
   r   r     s   

(r   c                 C   s.   t j|d }ttj| t| || d S rI   )rm   rn   splitextr   register_extensionr(   rh   r   )rw   r%   r$   extr
   r
   r   _save_spider  s   r   __main__r   z7Syntax: python3 SpiderImagePlugin.py [infile] [outfile]r   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 rE   )$rm   r"   sysr_   r   r   r   r   r   r'   r(   rx   r   r   r   register_openrh   register_savere   rl   argvrp   exitr$   r    rw   strr=   r<   rU   outfile	transposeFLIP_LEFT_RIGHTrn   basenamesaver
   r
   r
   r   <module>   sV   "	
s"


"