a
    ¥Q•hÿ$  ã                   @   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ƒsâedƒ e ¡  e e¡�ÂZ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  ƒ n1 �s¶0    Y  dS )#é    Né   )ÚImageÚ	ImageFilec              	   C   sB   z$t | ƒ}| | dkrW dS W dS W n ttfy<   Y dS 0 d S )Nr   r   )ÚintÚ
ValueErrorÚOverflowError)ÚfÚi© r
   úN/var/www/sistema_ama/venv/lib/python3.9/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rpd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*0    Y  t d|¡}t|ƒ}|dkrdt d|¡}t|ƒ}|S )NÚrbé\   z>23fr   z<23f)ÚopenÚreadÚstructÚunpackr   )ÚfilenameÚfpr   r   Úhdrlenr
   r
   r   ÚisSpiderImageR   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 )ÚSpiderImageFileZSPIDERzSpider 2D imageFc           
   
   C   sò  d}| j  |¡}zTd| _t d|¡}t|ƒ}|dkrNd| _t d|¡}t|ƒ}|dkrbd}t|ƒ‚W n4 tjy˜ } zd}t|ƒ|‚W Y d }~n
d }~0 0 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�rv| jdk�rvt|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ÚsizeÚtileÚ_fp)
ÚselfÚnr   r   r&   ÚmsgÚer   r   Úoffsetr
   r
   r   Ú_openb   sX     
zSpiderImageFile._openc                 C   s   | j S ©N©r6   ©r>   r
   r
   r   Ún_frames�   s    zSpiderImageFile.n_framesc                 C   s
   | j dkS ©Nr   rE   rF   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   )r5   rF   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)
r4   ÚEOFErrorÚ_seek_checkr&   r7   r8   r=   r%   ÚseekrC   )r>   Úframer@   r
   r
   r   rM   ¬   s    

zSpiderImageFile.seekéÿ   c                 C   sH   |   ¡ \}}d}||kr$|||  }| | }|  ||fdd„¡ d¡S )Nr   c                 S   s   | | | S rD   r
   )r	   ÚmÚbr
   r
   r   Ú<lambda>¾   ó    z.SpiderImageFile.convert2byte.<locals>.<lambda>ÚL)Ú
getextremaÚpointÚconvert)r>   ÚdepthÚminimumÚmaximumrP   rQ   r
   r
   r   Úconvert2byte¸   s    
zSpiderImageFile.convert2bytec                 C   s   ddl m} |j|  ¡ dd�S )Nr   )ÚImageTké   )Úpalette)Ú r\   Z
PhotoImager[   )r>   r\   r
   r
   r   ÚtkPhotoImageÁ   s    zSpiderImageFile.tkPhotoImageN)rO   )Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionÚ!_close_exclusive_fp_after_loadingrC   ÚpropertyrG   rI   rJ   rM   r[   r`   r
   r
   r
   r   r(   ]   s   ;


	r(   c              	   C   s¼   | du st | ƒdk rdS g }| D ]–}tj |¡s@td|› �ƒ q z6t |¡�}| ¡ }W d  ƒ n1 sj0    Y  W n* ty    t	|ƒs˜t|d ƒ Y q Y n0 ||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)ÚfilelistZimglistÚimgÚimr
   r
   r   ÚloadImageSeriesÌ   s"    *

rs   c           	      C   sê   | j \}}|d }td| ƒ}d| dkr2|d7 }|| }t|d ƒ}|dk rRg S g }t|ƒD ]}| d¡ q^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>  rS   z$makeSpiderHeader.<locals>.<listcomp>)r;   r   Úrangero   Úfloat)	rr   ZnsamÚnrowr   r   r   ZnvaluesÚhdrr	   r
   r
   r   ÚmakeSpiderHeaderæ   s.    

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   r.   r]   zError creating Spider headerzF;32NFr/   r0   r   )	ÚmoderW   r|   rh   ÚOSErrorÚ
writelinesr   Ú_saver;   )rr   r%   r$   r{   r@   r9   r
   r
   r   r€     s    

r€   c                 C   s.   t j |¡d }t tj|¡ t| ||ƒ d S rH   )ri   rj   Úsplitextr   Úregister_extensionr(   rd   r€   )rr   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 )N)%ri   r"   Úsysr_   r   r   r   r   r   r'   r(   rs   r|   r€   r„   Úregister_openrd   Úregister_savera   rh   Úargvrl   Úexitr$   r    rr   Ústrr;   r}   rU   ÚoutfileÚ	transposeÚ	TransposeÚFLIP_LEFT_RIGHTrj   ÚbasenameÚsaver
   r
   r
   r   Ú<module>#   sL   	o
 



ÿÿ