U
    ®&^ð  ã                	   @   sÐ   d dl Z d dlZddlmZmZ ddlmZmZm	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dddg¡ dS )é    Né   )ÚImageÚ	ImageFile)Úi8Úi16beÚo8c                 C   s   t | ƒdkot| ƒdkS )Né   éÚ  )ÚlenÚi16)Úprefix© r   ú6/tmp/pip-install-a1j0c_p1/Pillow/PIL/SgiImagePlugin.pyÚ_accept    s    r   ÚLú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
}
zt|	 }
W n tk
rª   Y nX |
d
kr¼tdƒ‚||f| _|
 d¡d | _	| j	dkræd| _
d}|dkrl|| | }|dkr*dd| j || j	d|ffg| _n@g | _|}| j	D ].}| j dd| j ||d|ff¡ ||7 }q:n&|dkr’dd| j ||
||ffg| _d S )Né   r	   zNot an SGI image filer   r   r   é   é   é
   Ú úUnsupported SGI image modeú;r   r   z	image/rgbéÿÿÿÿÚSGI16)r   r   Úrawr   Zsgi_rle)ÚfpÚreadr   Ú
ValueErrorr   ÚMODESÚKeyErrorÚ_sizeÚsplitÚmodeZcustom_mimetypeÚsizeZtileÚappend)ÚselfZheadlenÚsÚcompressionÚbpcZ	dimensionÚxsizeÚysizeÚzsizeZlayoutÚrawmodeÚorientationÚpagesizeÚoffsetZlayerr   r   r   Ú_open7   sL    




ÿ
ÿ
ÿzSgiImageFile._openN)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionr6   r   r   r   r   r   2   s   r   c              	   C   s6  | 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|  ¡ ƒ¡ƒ‚d}d}tj	 
tj	 |¡¡d }| 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}|  ¡ D ]}| | d|d|¡¡ q| ¡  d S )Nr   r   r   r   r.   r   )r   r   z%Unsupported number of bytes per pixelr   r	   r   r   r   z0incorrect number of bands in SGI write: {} vs {}éÿ   ÚasciiÚignorez>hz>Hz>lZ4só    Z79sr,   Z404sr   r    )r(   r#   ZencoderinfoÚgetr)   r
   Zgetbandsr:   ÚosÚpathÚsplitextÚbasenameÚencodeÚwriteÚstructÚpackr   r'   ÚtobytesÚclose)Úimr!   ÚfilenameÚinfor.   r3   ZmagicNumberZrleZdimÚxÚyÚzZpinminZpinmaxZimgNameZcolormapr2   Úchannelr   r   r   Ú_save}   sd    


 
ÿÿ
rR   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¡ t|ƒD ]J}t	 
d| jj| jjf¡}| | j d| ¡dd||¡ | j |j|¡ q:dS )Nr   r   r   r    r   )r   r   )ÚargsÚstater/   r0   r
   r(   ÚfdÚseekÚranger   ÚnewZ	frombytesr"   rK   Zputband)	r+   Úbufferr2   Zstrider3   r4   r1   ZbandrQ   r   r   r   ÚdecodeÌ   s    
    ÿzSGI16Decoder.decodeN)r7   r8   r9   Z	_pulls_fdr[   r   r   r   r   rS   É   s   rS   r   z	image/sgiz.bwz.rgbz.rgbaz.sgi)rA   rG   r   r   r   Ú_binaryr   r   r   r   r   r$   r   rR   Z	PyDecoderrS   Zregister_decoderZregister_openr:   Zregister_saveZregister_mimeZregister_extensionsr   r   r   r   Ú<module>   s*   øKL