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rçe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rÕe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 sàw   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   é   iõÿÿÿiôÿÿÿiëÿÿÿiêÿÿÿ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)Ú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r«t|d
 ƒt|d ƒ d | _|| _t|d ƒ| _|d }d| _n| j
dkr¾| jdkr¾|| j }d| _
ntdƒ‚| jrÉd| _nd| _d| _dd| j || jddffg| _| j | _d S )Nél   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"


ÿÿï"øõ