o
    ë6Wj6(  ã                   @  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lm	Z	m
Z
 ddlmZ dZd8dd„Zg d¢Zd9dd„Zd:dd„ZG dd„ de
j
ƒZd;d<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 r}ed-ƒ e ¡  ejd ZeeƒsŽed.ƒ e ¡  e	  e¡�eZ!ed/e!› �ƒ ed0e!j› �ƒ ed1e!j"› �ƒ ed2e!j#› �ƒ ed3d4d5� ee! $¡ ƒ eejƒd,krðejd, Z%e! &e	j'j(¡Z)ed6ej* +e¡› d7e%› d4�ƒ e) ,e%ej¡ W d  ƒ dS W d  ƒ dS 1 sûw   Y  dS dS )?é    )ÚannotationsN)ÚIOÚAnyé   )ÚImageÚ	ImageFile)ÚDeferredErrorFÚ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   úd/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/PIL/SpiderImagePlugin.pyÚisInt0   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   ÚisSpiderHeaderD   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   ÚisSpiderImageX   s   ÿr.   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 d us	J ‚| j  |¡}z*d| _t d|¡}t|ƒ}|dkr.d| _t d|¡}t|ƒ}|dkr8d}t|ƒ‚W n tjyM } zd}t|ƒ|‚d }~ww d| }t|d ƒ}|dkrbd	}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| _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)   Ú	bigendianr*   r+   r#   ÚSyntaxErrorÚerrorr   Ú_sizeÚistackÚ	imgnumberÚ_nimagesÚimgbytesr-   Ú	stkoffsetÚrawmodeÚ_moder   Ú_TileÚsizeÚtileÚ_fp)
ÚselfÚnr	   r   r-   ÚmsgÚer   r   Úoffsetr   r   r   Ú_openh   s`   þ
€þ
zSpiderImageFile._openr   c                 C  s   | j S ©N©r@   ©rI   r   r   r   Ún_frames¤   s   zSpiderImageFile.n_framesÚboolc                 C  s
   | j dkS ©Nr   rP   rQ   r   r   r   Úis_animated¨   s   
zSpiderImageFile.is_animatedc                 C  s   | j dk rdS | j d S )Nr   r   )r?   rQ   r   r   r   Útell­   s   

zSpiderImageFile.tellÚframec                 C  sr   | j dkrd}t|ƒ‚|  |¡sd S t| jtƒr| jj‚| j|| j| j   | _	| j| _
| j
 | j	¡ |  ¡  d S )Nr   z#attempt to seek in a non-stack file)r>   ÚEOFErrorÚ_seek_checkÚ
isinstancerH   r   Úexr-   rA   rB   r,   ÚseekrN   )rI   rW   rK   r   r   r   r\   ³   s   

zSpiderImageFile.seekéÿ   ÚdepthúImage.Imagec                   s^   |   ¡ }t|d tƒsJ ‚|\}}d‰||kr|||  ‰ˆ | ‰ |  ‡ ‡fdd„¡ d¡S )Nr   r   c                   s   | ˆ ˆ  S rO   r   )r   ©ÚbÚmr   r   Ú<lambda>É   s    z.SpiderImageFile.convert2byte.<locals>.<lambda>ÚL)Ú
getextremarZ   ÚfloatÚpointÚconvert)rI   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   )rI   rn   r   r   r   ÚtkPhotoImageÏ   s   zSpiderImageFile.tkPhotoImageN)r
   r1   )r
   r   )r
   rS   )rW   r   r
   r1   )r]   )r^   r   r
   r_   )r
   ro   )Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionÚ!_close_exclusive_fp_after_loadingrN   ÚpropertyrR   rU   rV   r\   rl   ÚTYPE_CHECKINGrr   rn   rt   r   r   r   r   r/   c   s    
<


r/   Úfilelistúlist[str] | Noneúlist[Image.Image] | Nonec              	   C  sÈ   | du s
t | ƒdk rdS g }| D ]Q}tj |¡s td|› �ƒ qz"t |¡�}t|tƒs.J ‚| 	¡ }W d  ƒ n1 s<w   Y  W n t
yV   t|ƒsTt|› 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(   rZ   r/   rl   Ú	Exceptionr.   ÚinfoÚappend)r}   Ú	byte_imgsÚimgÚimÚbyte_imr   r   r   ÚloadImageSeriesÚ   s*   
þ€ý
rŒ   rŠ   r_   úlist[bytes]c                 C  sÞ   | j \}}td|ƒ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   r5   i   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>)rF   Úmaxr   rf   r‡   )rŠ   ÚnsamÚnrowr"   r    r!   ÚnvaluesÚhdrr   r   r   ÚmakeSpiderHeaderõ   s*   


r—   r,   ú	IO[bytes]ústr | bytesr1   c              
   C  sh   | j dkr
|  d¡} t| ƒ}t|ƒdk rd}t|ƒ‚| |¡ d}t | |t dd| j	 d|¡g¡ d S )Nr7   rp   zError creating Spider headerzF;32NFr8   r9   r   )
Úmoderh   r—   r€   ÚOSErrorÚ
writelinesr   Ú_saverE   rF   )rŠ   r,   r$   r–   rK   rC   r   r   r   r�     s   


&r�   c                 C  sH   t j |¡d  }rt|tƒr| ¡ n|}t tj	|¡ t
| ||ƒ d S rT   )r�   r‚   ÚsplitextrZ   ÚbytesÚdecoder   Úregister_extensionr/   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   rO   )r}   r~   r
   r   )rŠ   r_   r
   r�   )rŠ   r_   r,   r˜   r$   r™   r
   r1   )-Ú
__future__r   r�   r*   ÚsysÚtypingr   r   rr   r   r   Ú_utilr   r|   r   r   r#   r.   r/   rŒ   r—   r�   r¤   Úregister_openrx   Úregister_saveru   r€   Úargvr„   Úexitr$   r(   rŠ   rF   rš   re   ÚoutfileÚ	transposeÚ	TransposeÚFLIP_LEFT_RIGHTÚtransposed_imr‚   ÚbasenameÚsaver   r   r   r   Ú<module>   s^   "

	
w





ÿÿï"øö