o
    Ñ­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 d6d
d„Zg d¢Zd7dd„Zd8dd„ZG dd„ dejƒZd9d:dd„Zd;dd „Zd<d%d&„Zd<d'd(„Ze eje¡ e eje¡ ed)krÿeejƒd*k rzed+ƒ e ¡  ejd Zeeƒs‹ed,ƒ e ¡  e  e¡�eZ!ed-e!› �ƒ ed.e!j› �ƒ ed/e!j"› �ƒ ed0e!j#› �ƒ ed1d2d3� ee! $¡ ƒ eejƒd*kríejd* Z%e! &ej'j(¡Z!ed4ej) *e¡› d5e%› d2�ƒ e! +e%ej¡ W d  ƒ dS W d  ƒ dS 1 søw   Y  dS dS )=é    )ÚannotationsN)ÚIOÚTYPE_CHECKINGÚAnyÚTupleÚcasté   )ÚImageÚ	ImageFileÚfr   ÚreturnÚintc              	   C  s:   zt | ƒ}| | dkrW dS W dS  ttfy   Y dS w )Nr   r   )r   Ú
ValueErrorÚOverflowError)r   Úi© r   úR/var/www/html/CropPilot/venv/lib/python3.10/site-packages/PIL/SpiderImagePlugin.pyÚisInt-   s   ÿr   )r   é   iõÿÿÿiôÿÿÿiëÿÿÿiêÿÿÿÚtútuple[float, ...]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)r   Úhr   ÚiformÚlabrecÚlabbytÚlenbytr   r   r   ÚisSpiderHeaderA   s   ÿr%   ÚfilenameÚstrc                 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%   )r&   Úfpr   r   Úhdrlenr   r   r   ÚisSpiderImageU   s   ÿr0   c                   @  sx   e Zd ZdZdZdZddd„Zedd	d
„ƒZed dd„ƒZ	ddd„Z
d!dd„Zd"d#dd„Zer5ddlmZ d$dd„ZdS )%ÚSpiderImageFileÚSPIDERzSpider 2D imageFr   ÚNonec           
   
   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   Ú_opene   s^   þ
€þ
zSpiderImageFile._openr   c                 C  s   | j S ©N©rB   ©rJ   r   r   r   Ún_frames    s   zSpiderImageFile.n_framesÚboolc                 C  s
   | j dkS ©Nr   rQ   rR   r   r   r   Úis_animated¤   s   
zSpiderImageFile.is_animatedc                 C  s   | j dk rdS | j d S )Nr   r   )rA   rR   r   r   r   Útell©   s   

zSpiderImageFile.tellÚframec                 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@   ÚEOFErrorÚ_seek_checkr/   rC   rD   rI   r.   ÚseekrO   )rJ   rX   rL   r   r   r   r[   ¯   s   

zSpiderImageFile.seekéÿ   ÚdepthúImage.Imagec                   sl   |   ¡ }t|d tƒsJ ‚ttttf |ƒ\}}d‰||kr$|||  ‰ˆ | ‰ |  ‡ ‡fdd„¡ d¡S )Nr   r   c                   s   | ˆ ˆ  S rP   r   )r   ©ÚbÚmr   r   Ú<lambda>Ã   s    z.SpiderImageFile.convert2byte.<locals>.<lambda>ÚL)Ú
getextremaÚ
isinstanceÚfloatr   r   ÚpointÚconvert)rJ   r]   ÚextremaÚminimumÚmaximumr   r_   r   Úconvert2byte»   s   
zSpiderImageFile.convert2byter   ©ÚImageTkúImageTk.PhotoImagec                 C  s   ddl m} |j|  ¡ dd�S )Nr   rm   é   )Úpalette)Ú rn   Ú
PhotoImagerl   )rJ   rn   r   r   r   ÚtkPhotoImageÉ   s   zSpiderImageFile.tkPhotoImageN)r   r3   )r   r   )r   rT   )rX   r   r   r3   )r\   )r]   r   r   r^   )r   ro   )Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionÚ!_close_exclusive_fp_after_loadingrO   ÚpropertyrS   rV   rW   r[   rl   r   rr   rn   rt   r   r   r   r   r1   `   s    
;


r1   Úfilelistúlist[str] | Noneúlist[SpiderImageFile] | Nonec              	   C  sº   | du s
t | ƒdk rdS g }| D ]J}tj |¡s td|› �ƒ qzt |¡�}| ¡ }W d  ƒ n1 s5w   Y  W n tyO   t	|ƒsMt|› 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*   rl   Ú	Exceptionr0   ÚinfoÚappend)r|   ÚimglistÚimgÚimr   r   r   ÚloadImageSeriesÔ   s(   
ÿ€ý
rŠ   r‰   r^   úlist[bytes]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 )Nr7   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>)rG   r   rf   r†   )r‰   ÚnsamÚnrowr$   r"   r#   ÚnvaluesÚhdrr   r   r   ÚmakeSpiderHeaderî   s*   


r”   r.   ú	IO[bytes]ústr | bytesr3   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   r9   rp   zError creating Spider headerzF;32NFr:   r;   r   )	Úmoderh   r”   r   ÚOSErrorÚ
writelinesr
   Ú_saverG   )r‰   r.   r&   r“   rL   rE   r   r   r   rš     s   

(rš   c                 C  sD   t j |¡d }t|tƒr| ¡ n|}t tj	|¡ t
| ||ƒ d S rU   )r€   r�   Úsplitextre   ÚbytesÚdecoder	   Úregister_extensionr1   rx   rš   )r‰   r.   r&   Ú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 )r   r   r   r   )r   r   r   r   )r&   r'   r   r   rP   )r|   r}   r   r~   )r‰   r^   r   r‹   )r‰   r^   r.   r•   r&   r–   r   r3   ),Ú
__future__r   r€   r,   ÚsysÚtypingr   r   r   r   r   rr   r	   r
   r   r   r%   r0   r1   rŠ   r”   rš   r¡   Úregister_openrx   Úregister_saveru   r   Úargvrƒ   Úexitr&   r*   r‰   rG   r—   rd   ÚoutfileÚ	transposeÚ	TransposeÚFLIP_LEFT_RIGHTr�   ÚbasenameÚsaver   r   r   r   Ú<module>   sZ   "

	
t




ÿÿï"øö