
    e$                    @   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 Zg dZ	d Z
d Z G d	 d
ej                        ZddZd Zd Zd Z ej"                  ej$                  e        ej&                  ej$                  e       edk(  r eej,                        dk  r ed        ej0                          ej,                  d   Z ee      s ed        ej0                           ej4                  e      5 Z ed ee      z           ed eej$                        z           ed eej:                        z           ed eej<                        z           edd        eej?                                 eej,                        dkD  rxej,                  d   Z ejC                  ejD                  jF                        Z edejH                  jK                  e       de  d       ejM                  e ej$                         ddd       yy# 1 sw Y   yxY w)    )annotationsN   )Image	ImageFilec                X    	 t        |       }| |z
  dk(  ryy# t        t        f$ r Y yw xY w)Nr   r   )int
ValueErrorOverflowError)fis     7/usr/lib/python3/dist-packages/PIL/SpiderImagePlugin.pyisIntr   ,   s8    Fq5A:& s    )))r      iiiic                    d| z   }dD ]  }t        ||         r y t        |d         }|t        vryt        |d         }t        |d         }t        |d         }|||z  k7  ry|S )Nc   )r                     r   r   r   r   r   )r   r   iforms)thr   iformlabreclabbytlenbyts          r   isSpiderHeaderr    @   s}    	A& QqT{ !IEF2ZF2ZF2ZF&6/"M    c                    t        | d      5 }|j                  d      }d d d        t        j                  d      }t	        |      }|dk(  r!t        j                  d|      }t	        |      }|S # 1 sw Y   RxY w)Nrb\   z>23fr   z<23f)openreadstructunpackr    )filenamefpr   r   hdrlens        r   isSpiderImager,   T   sp    	h	 GGBKfa AAF{MM&!$"M s   A00A9c                  X    e Zd ZdZdZdZd Zed        Zed        Z	d Z
d Zdd	Zd
 Zy)SpiderImageFileSPIDERzSpider 2D imageFc                   d}| j                   j                  |      }	 d| _        t        j                  d|      }t        |      }|dk(  r(d| _        t        j                  d|      }t        |      }|dk(  rd}t        |      	 d|z   }t        |d         }|dk7  rd	}t        |      t        |d
         t        |d         f| _	        t        |d         | _
        t        |d         | _        | j                  dk(  r| j                  dk(  r
|}	d| _        n| j                  dkD  r[| j                  dk(  rLt        |d
         t        |d         z  dz  | _        || _        t        |d         | _        |dz  }	d| _        nB| j                  dk(  r&| j                  dkD  r|| j                  z   }	d| _
        nd}t        |      | j                  rd| _        nd| _        d| _        dd| j$                  z   |	| j                   ddffg| _        | j                   | _        y # t        j                  $ r}d}t        |      |d }~ww xY w)Nl   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   offsets
             r   _openzSpiderImageFile._opend   s   GGLLO	*DNfa(A#A&F{!"MM&!,'*{/!#&&  AIAaD	A:)Cc""2ZQqT*
!B%jQrU;;!! 3FDM[[1_1!4"JQqT2Q6DM DK"JDMaZFDN[[A$..1"4dnn,FDK4Cc"">>#DL"DL
Vdii/$,,19MNO	77S || 	*+Cc")	*s   A'H! !I4IIc                    | j                   S Nr?   rG   s    r   n_frameszSpiderImageFile.n_frames   s    }}r!   c                     | j                   dkD  S Nr   rO   rP   s    r   is_animatedzSpiderImageFile.is_animated   s    }}q  r!   c                @    | j                   dk  ry| j                   dz
  S )Nr   r   )r>   rP   s    r   tellzSpiderImageFile.tell   s     >>A>>A%%r!   c                H   | j                   dk(  rd}t        |      | j                  |      sy | j                  || j                  | j                  z   z  z   | _        | j                  | _        | j                  j                  | j
                         | j                          y )Nr   z#attempt to seek in a non-stack file)
r=   EOFError_seek_checkr+   r@   rA   rF   r*   seekrL   )rG   framerI   s      r   rZ   zSpiderImageFile.seek   sx    ;;!7C3-&udmm0K'LL((T^^$

r!   c                    | j                         \  }}d}||k7  r|||z
  z  }| |z  }| j                  ||fd      j                  d      S )Nr   c                    | |z  |z   S rN    )r   mbs      r   <lambda>z.SpiderImageFile.convert2byte.<locals>.<lambda>   s    a!eai r!   L)
getextremapointconvert)rG   depthminimummaximumr_   r`   s         r   convert2bytezSpiderImageFile.convert2byte   sY    !__.'g7*+ABLzza178@@EEr!   c                P    ddl m} |j                  | j                         d      S )Nr   )ImageTk   )palette) rk   
PhotoImageri   )rG   rk   s     r   tkPhotoImagezSpiderImageFile.tkPhotoImage   s$    !!$"3"3"5s!CCr!   N)   )__name__
__module____qualname__formatformat_description!_close_exclusive_fp_after_loadingrL   propertyrQ   rT   rV   rZ   ri   rp   r^   r!   r   r.   r.   _   sW    F*(-%9v   ! !&	FDr!   r.   c                   | t        |       dk  ryg }| D ]  }t        j                  j                  |      st	        d|        1	 t        j                  |      5 }|j                         }ddd       |j                  d<   |j                  |        |S # 1 sw Y   -xY w# t        $ r t        |      st	        |dz          Y w xY w)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%   ri   	Exceptionr,   infoappend)filelistimglistimgims       r   loadImageSeriesr      s    3x=1,G ww~~c"OC5)*	C 'B__&' "
r N' ' 	 %c99:	s*   B&B.B&B#	B&&"C
Cc                   | j                   \  }}|dz  }t        d|z        }d|z  dk7  r|dz  }||z  }t        |dz        }|dk  rg S dg|z  }d|d<   t        |      |d<   t        |      |d	<   d|d
<   t        |      |d<   t        |      |d<   t        |      |d<   t        |      |d<   |dd  }|j                  d       |D cg c]  }t	        j
                  d|       c}S c c}w )Nr4   i   r   r   r   g        g      ?r   r   r   r   r   r   r   )rD   r   floatr   r'   pack)	r   nsamnrowr   r   r   nvalueshdrvs	            r   makeSpiderHeaderr      s   JD$AXFFf}!f_F&1*oG|	%'/C CF4[CF4[CFCFDkCGFmCGFmCGFmCG ab'CJJsO),-AFKKQ---s   C(c           
        | j                   d   dk7  r| j                  d      } t        |       }t        |      dk  rd}t	        |      |j                  |       d}t        j                  | |dd| j                  z   d|ddffg       y )	Nr   r6   rl   zError creating Spider headerzF;32NFr7   r8   r   )	modere   r   rz   OSError
writelinesr   _saverD   )r   r*   r)   r   rI   rB   s         r   r   r     s    	wwqzSZZ_
2
C
3x#~,cl MM#GOOBeVbgg%5q7Aq/JKLr!   c                    t         j                  j                  |      d   }t        j                  t
        j                  |       t        | ||       y rS   )r{   r|   splitextr   register_extensionr.   ru   r   )r   r*   r)   exts       r   _save_spiderr     s=    
''

8
$Q
'C	_33S9	"b(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 rN   )'
__future__r   r{   r'   sysrn   r   r   r   r   r    r,   r.   r   r   r   r   register_openru   register_saverr   rz   argvr~   exitr)   r%   r   strrD   r   rc   outfile	transpose	TransposeFLIP_LEFT_RIGHTr|   basenamesaver^   r!   r   <module>r      s  F # 	  
  
$(gDi)) gD^4.<M    O**O <   O**L 9z
388}qGH
xx{H"45
	H	 5i#b'!"j3ryy>)*hRWW%&hRWW%&l$bmmosxx=1hhqkG eoo==>B.rww/?/?/I.J KYa! GGG_334#5 5 5 5s   :DHH