U
    M»{jF'  ã                	   @  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 dddœd	d
„ZddddddgZdddœdd„Zdddœdd„ZG dd„ dejƒZd9d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d0e!› �ƒ ed1e!j› �ƒ ed2e!j"› �ƒ ed3e!j#› �ƒ ed4d5d6� ee! $¡ ƒ eejƒd-k�rejd- Z%e! &ej'j(¡Z!ed7ej) *e¡› d8e%› d5�ƒ e! +e%ej¡ W 5 Q R X dS ):é    )ÚannotationsN)ÚIOÚTYPE_CHECKINGÚAnyÚTupleÚcasté   )ÚImageÚ	ImageFiler   Úint)ÚfÚreturnc              	   C  sD   z$t | ƒ}| | dkrW dS W dS W n ttfk
r>   Y dS X d S )Nr   r   )r   Ú
ValueErrorÚOverflowError)r   Úi© r   úT/var/www/html/bwave/python/venv/lib/python3.8/site-packages/PIL/SpiderImagePlugin.pyÚisInt-   s    
r   é   iõÿÿÿiôÿÿÿiëÿÿÿiêÿÿÿztuple[float, ...])Útr   c                 C  st   d|  }dD ]}t || ƒs dS qt|d ƒ}|tk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   ÚisSpiderHeaderA   s    r$   Ústr)Úfilenamer   c              	   C  sT   t | dƒ�}| d¡}W 5 Q R X t d|¡}t|ƒ}|dkrPt d|¡}t|ƒ}|S )NÚrbé\   z>23fr   z<23f)ÚopenÚreadÚstructÚunpackr$   )r&   Úfpr   r   Úhdrlenr   r   r   ÚisSpiderImageU   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r†d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 n2 tjk
r– } zd}t|ƒ|‚W 5 d }~X Y nX 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| _n�| j
dk�rt| jdk�rtt|d
 ƒt|d ƒ d | _|| _t|d ƒ| _|d }	d| _n6| j
dk�rž| jdk�rž|| j }	d| _
nd}t|ƒ‚| 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*   Z	bigendianr+   r,   r$   ÚSyntaxErrorÚerrorr   Ú_sizeÚistackÚ	imgnumberÚ_nimagesÚimgbytesr.   Ú	stkoffsetÚrawmodeÚ_modeÚsizeZtileÚ_fp)
ÚselfÚnr   r   r.   ÚmsgÚer   r    Úoffsetr   r   r   Ú_opene   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  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=   ÚEOFErrorZ_seek_checkr.   r@   rA   rE   r-   ÚseekrK   )rF   rT   rH   r   r   r   rV   ¯   s    

zSpiderImageFile.seekéÿ   úImage.Image)Údepthr   c                   sl   |   ¡ }t|d tƒst‚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)Ú
getextremaÚ
isinstanceÚfloatÚAssertionErrorr   r   ÚpointÚconvert)rF   rY   ZextremaÚminimumÚmaximumr   rZ   r   Úconvert2byte»   s    
zSpiderImageFile.convert2byter   ©ÚImageTkzImageTk.PhotoImagec                 C  s   ddl m} |j|  ¡ dd�S )Nr   ri   é   )Úpalette)Ú rj   Z
PhotoImagerh   )rF   rj   r   r   r   ÚtkPhotoImageÉ   s    zSpiderImageFile.tkPhotoImageN)rW   )Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionZ!_close_exclusive_fp_after_loadingrK   ÚpropertyrO   rR   rS   rV   rh   r   rm   rj   rn   r   r   r   r   r0   `   s   ;
r0   zlist[str] | Nonezlist[SpiderImageFile] | None)Úfilelistr   c              
   C  s¬   | dkst | ƒdk rdS g }| D ]†}tj |¡s@td|› �ƒ q z"t |¡�}| ¡ }W 5 Q R X W n. tk
r�   t	|ƒsˆt|› d�ƒ Y q Y nX ||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)   rh   Ú	Exceptionr/   ÚinfoÚappend)ru   ZimglistZimgÚimr   r   r   ÚloadImageSeriesÔ   s"    

r   rX   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 )Nr5   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>)rD   r   rb   r}   )r~   ZnsamZnrowr#   r!   r"   ZnvaluesÚhdrr   r   r   ÚmakeSpiderHeaderî   s*    


r…   z	IO[bytes]zstr | bytesr1   )r~   r-   r&   r   c              
   C  sn   | j d dkr|  d¡} t| ƒ}t|ƒdk r8d}t|ƒ‚| |¡ d}t | |dd| j d|ddffg¡ d S )	Nr   r7   rk   zError creating Spider headerzF;32NFr8   r9   r   )	Úmodere   r…   rv   ÚOSErrorÚ
writelinesr
   Ú_saverD   )r~   r-   r&   r„   rH   rB   r   r   r   r‰     s    

r‰   c                 C  sD   t j |¡d }t|tƒr"| ¡ n|}t tj	|¡ t
| ||ƒ d S rQ   )rw   rx   Úsplitextra   ÚbytesÚdecoder	   Zregister_extensionr0   rr   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   rw   r+   ÚsysÚtypingr   r   r   r   r   rm   r	   r
   r   r   r$   r/   r0   r   r…   r‰   rŽ   Zregister_openrr   Zregister_savero   rv   Úargvrz   Úexitr&   r)   r~   rD   r†   r`   ÚoutfileZ	transposeZ	TransposeZFLIP_LEFT_RIGHTrx   ÚbasenameÚsaver   r   r   r   Ú<module>#   sL   	t



ÿ