o
    ÒèFhû$  ã                   @  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rîe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rÜe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 sçw   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   úN/var/www/html/loop/nvenv/lib/python3.10/site-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   Ú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r±t|d
 ƒt|d ƒ d | _|| _t|d ƒ| _|d }	d| _n| 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"   Ú	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


ÿÿï"øö