B
    ²â1\  ã            	   @   sî   d dl mZmZ d dlmZmZmZ d dlm	Z	 ddl
Z
ddlZdZdd„ Zd	d	d
d
dddddœZG dd„ dejƒZdd„ ZG dd„ dejƒZe de¡ e ejee¡ e eje¡ e ejd¡ e ejd¡ e ejddddg¡ dS )é   )ÚImageÚ	ImageFile)Úi8Úo8Úi16be)Úpy3é    Nz0.3c             C   s   t | ƒdkot| ƒdkS )Né   iÚ  )ÚlenÚi16)Úprefix© r   ú1lib/python3.7/site-packages/PIL/SgiImagePlugin.pyÚ_accept#   s    r   ÚLzL;16BÚRGBzRGB;16BÚRGBAzRGBA;16B))r   r   r   )r   r	   r   )r	   r   r   )r	   r	   r   )r   é   r   )r	   r   r   )r   r   é   )r	   r   r   c               @   s   e Zd ZdZdZdd„ ZdS )ÚSgiImageFileZSGIzSGI Image File Formatc          	   C   sŠ  d}| j  |¡}t|ƒdkr$tdƒ‚t|d ƒ}t|d ƒ}t|dd … ƒ}t|dd … ƒ}t|dd … ƒ}t|d	d … ƒ}|||f}	d
}
yt|	 }
W n tk
rª   Y nX |
d
kr¼tdƒ‚||f| _|
 d¡d | _	d}|dkr`|| | }|dkrdd| j
 || j	d|ffg| _nDg | _|}x`| j	D ].}| j dd| j
 ||d|ff¡ ||7 }q,W n&|dkr†dd| j
 ||
||ffg| _d S )Ni   iÚ  zNot an SGI image filer	   r   r   é   é   é
   Ú zUnsupported SGI image modeú;r   éÿÿÿÿÚSGI16)r   r   Úrawr   Zsgi_rle)ÚfpÚreadr   Ú
ValueErrorr   ÚMODESÚKeyErrorZ_sizeÚsplitÚmodeÚsizeZtileÚappend)ÚselfZheadlenÚsZcompressionÚbpcZ	dimensionÚxsizeÚysizeÚzsizeZlayoutÚrawmodeÚorientationÚpagesizeÚoffsetZlayerr   r   r   Ú_open:   sH    







zSgiImageFile._openN)Ú__name__Ú
__module__Ú__qualname__ÚformatZformat_descriptionr1   r   r   r   r   r   5   s   r   c          	   C   s>  | j dkr&| j dkr&| j dkr&tdƒ‚| j}| dd¡}|dkrHtdƒ‚d	}d
}d}d}| j\}	}
| j dkrz|
dkrzd}n| j dkrˆd}t| j ƒ}|dks¢|dkr¦d}t|  ¡ ƒ|krÎtd|t|  ¡ ƒf ƒ‚d}d}tj 	tj 
|¡¡d }trþ| dd¡}d}| t d|¡¡ | t|ƒ¡ | t|ƒ¡ | t d|¡¡ | t d|	¡¡ | t d|
¡¡ | t d|¡¡ | t d|¡¡ | t d|¡¡ | t dd¡¡ | t d|¡¡ | t dd¡¡ | t d|¡¡ | t dd¡¡ d}|dkrd}x(|  ¡ D ]}| | d|d|¡¡ qW | ¡  d S )Nr   r   r   zUnsupported SGI image moder)   r   )r   r	   z%Unsupported number of bytes per pixelr   iÚ  r   r   r	   z0incorrect number of bands in SGI write: %s vs %séÿ   ÚasciiÚignorez>hz>Hz>lZ4só    Z79sr(   Z404szL;16Br   )r$   r    ZencoderinfoÚgetr%   r
   ZgetbandsÚosÚpathÚsplitextÚbasenamer   ÚencodeÚwriteÚstructZpackr   r#   ÚtobytesÚclose)Úimr   ÚfilenameÚinfor)   r.   ZmagicNumberZrleZdimÚxÚyÚzZpinminZpinmaxZimgNameZcolormapr-   Úchannelr   r   r   Ú_save|   s^    



rK   c               @   s   e Zd ZdZdd„ ZdS )ÚSGI16DecoderTc       	      C   sŽ   | j \}}}| jj| jj }t| jƒ}| j d¡ xVt|ƒD ]J}t	 
d| jj| jjf¡}| | j d| ¡dd||¡ | j |j|¡ q<W dS )Ni   r   r	   r   zL;16B)r   r   )ÚargsÚstater*   r+   r
   r$   ÚfdÚseekÚranger   ÚnewZ	frombytesr   rD   Zputband)	r'   Úbufferr-   Zstrider.   r/   r,   ZbandrJ   r   r   r   ÚdecodeÉ   s    

zSGI16Decoder.decodeN)r2   r3   r4   Z	_pulls_fdrT   r   r   r   r   rL   Æ   s   rL   r   z	image/sgiz	image/rgbz.bwz.rgbz.rgbaz.sgi)r   r   r   Z_binaryr   r   r   r   Z_utilr   rA   r;   Ú__version__r   r!   r   rK   Z	PyDecoderrL   Zregister_decoderZregister_openr5   Zregister_saveZregister_mimeZregister_extensionsr   r   r   r   Ú<module>   s0   GJ