a
    ç´«j	(  ã                   @  s0  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 ddl	m
Z
mZ ddlmZ dZdd	d
œdd„Zg d¢Zdd	dœdd„Zdd	dœdd„ZG dd„ dejƒZd7d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d.e"› �ƒ ed/e"j› �ƒ ed0e"j#› �ƒ ed1e"j$› �ƒ ed2d3d4� ee" %¡ ƒ eejƒd+k�rejd+ Z&e" 'e
j(j)¡Z"ed5ej* +e ¡› d6e&› d3�ƒ e" ,e&ej¡ W d  ƒ n1 �s"0    Y  dS )8é    )ÚannotationsN)ÚIOÚAnyÚcasté   )ÚImageÚ	ImageFile)ÚDeferredErrorFr   Úint)ÚfÚreturnc              	   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   )r
   Ú
ValueErrorÚOverflowError)r   Úi© r   úT/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/PIL/SpiderImagePlugin.pyÚisInt0   s    
r   )r   é   iõÿÿÿiôÿÿÿiëÿÿÿiêÿÿÿztuple[float, ...])Útr   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)r   Úhr   ÚiformÚlabrecÚlabbytÚlenbytr   r   r   ÚisSpiderHeaderD   s    r#   Ústr)Úfilenamer   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#   )r%   Úfpr   r   Úhdrlenr   r   r   ÚisSpiderImageX   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 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| _t dd| j |	| j¡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Ú_moder   Ú_TileÚsizeZtileÚ_fp)
ÚselfÚnr   r   r-   ÚmsgÚer   r   Úoffsetr   r   r   Ú_openh   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  sr   | j dkrd}t|ƒ‚|  |¡s$d S t| jtƒr8| jj‚| j|| j| j   | _	| j| _
| j
 | j	¡ |  ¡  d S )Nr   z#attempt to seek in a non-stack file)r<   ÚEOFErrorZ_seek_checkÚ
isinstancerE   r	   Úexr-   r?   r@   r,   ÚseekrK   )rF   rT   rH   r   r   r   rX   ²   s    

zSpiderImageFile.seekéÿ   úImage.Image)Údepthr   c                   sl   |   ¡ }t|d tƒsJ ‚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)Ú
getextremarV   Úfloatr   ÚtupleÚpointÚconvert)rF   r[   ZextremaÚminimumÚmaximumr   r\   r   Úconvert2byteÀ   s    
zSpiderImageFile.convert2byter   ©ÚImageTkzImageTk.PhotoImagec                 C  s   ddl m} |j|  ¡ dd�S )Nr   rj   é   )Úpalette)Ú rk   Z
PhotoImageri   )rF   rk   r   r   r   ÚtkPhotoImageÎ   s    zSpiderImageFile.tkPhotoImageN)rY   )Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionZ!_close_exclusive_fp_after_loadingrK   ÚpropertyrO   rR   rS   rX   ri   ÚTYPE_CHECKINGrn   rk   ro   r   r   r   r   r/   c   s   ;
r/   zlist[str] | Nonezlist[Image.Image] | None)Úfilelistr   c              	   C  sÌ   | du st | ƒdk rdS g }| D ]¦}tj |¡s@td|› �ƒ q zDt |¡�&}t|tƒs\J ‚| 	¡ }W d  ƒ n1 sx0    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(   rV   r/   ri   Ú	Exceptionr.   ÚinfoÚappend)rw   Z	byte_imgsÚimgÚimZbyte_imr   r   r   ÚloadImageSeriesÙ   s$    *

r‚   rZ   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 )Nr4   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>  r`   z$makeSpiderHeader.<locals>.<listcomp>)rD   r
   rc   r   )r�   ZnsamZnrowr"   r    r!   ZnvaluesÚhdrr   r   r   ÚmakeSpiderHeaderô   s*    


rˆ   z	IO[bytes]zstr | bytesr0   )r�   r,   r%   r   c              
   C  sh   | j dkr|  d¡} t| ƒ}t|ƒdk r4d}t|ƒ‚| |¡ d}t | |t dd| j	 d|¡g¡ d S )Nr6   rl   zError creating Spider headerzF;32NFr7   r8   r   )
Úmoderf   rˆ   rx   ÚOSErrorÚ
writelinesr   Ú_saverC   rD   )r�   r,   r%   r‡   rH   rA   r   r   r   rŒ     s    


rŒ   c                 C  sD   t j |¡d }t|tƒr"| ¡ n|}t tj	|¡ t
| ||ƒ d S rQ   )ry   rz   ÚsplitextrV   ÚbytesÚdecoder   Zregister_extensionr/   rs   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   ry   r*   ÚsysÚtypingr   r   r   rn   r   r   Z_utilr	   rv   r   r   r#   r.   r/   r‚   rˆ   rŒ   r‘   Zregister_openrs   Zregister_saverp   rx   Úargvr|   Úexitr%   r(   r�   rD   r‰   rb   ÚoutfileZ	transposeZ	TransposeZFLIP_LEFT_RIGHTrz   ÚbasenameÚsaver   r   r   r   Ú<module>#   sT   	v



ÿÿ