B
    àz÷bØ  ã            	   @   sÔ   d dl Z d dlZddlmZmZ ddlmZ ddl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)Úi16be)Úo8c             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   sv  d}| j  |¡}t|ƒs tdƒ‚|d }|d }t|dƒ}t|dƒ}t|dƒ}t|dƒ}|||f}	d	}
y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| _nDg | _|}x`| j	D ].}| j dd| j ||d|ff¡ ||7 }qW n&|dkrrdd| j ||
||ffg| _d S )Ni   zNot an SGI image filer   r   r   é   é   é
   Ú zUnsupported SGI image modeú;r   r   z	image/rgbéÿÿÿÿÚSGI16)r   r   Úrawr   Zsgi_rle)ÚfpÚreadr   Ú
ValueErrorr	   ÚMODESÚKeyErrorZ_sizeÚsplitÚmodeZcustom_mimetypeÚsizeZtileÚappend)ÚselfZheadlenÚsZcompressionÚbpcZ	dimensionÚxsizeÚysizeÚzsizeZlayoutÚrawmodeÚorientationÚpagesizeÚoffsetZlayerr   r   r   Ú_open8   sF    








 
zSgiImageFile._openN)Ú__name__Ú
__module__Ú__qualname__ÚformatZformat_descriptionr/   r   r   r   r   r   3   s   r   c          	   C   sJ  | 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|› 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}x(|  ¡ D ]}| | d|d|¡¡ qW t|dƒrF| ¡  d S )Nr   r   r   zUnsupported SGI image moder'   r   )r   r   z%Unsupported number of bytes per pixelr   iÚ  r   r   r   z(incorrect number of bands in SGI write: z vs éÿ   ÚasciiÚignorez>hz>Hz>lZ4só    Z79sr&   Z404szL;16Br   Úflush)r"   r   ZencoderinfoÚgetr#   r   ZgetbandsÚosÚpathÚsplitextÚbasenameÚencodeÚwriteÚstructZpackr   r!   ÚtobytesÚhasattrr8   )Úimr   ÚfilenameÚinfor'   r,   Zmagic_numberZrleZdimÚxÚyÚzZpinminZpinmaxZimg_nameZcolormapr+   Úchannelr   r   r   Ú_save}   s^    



rJ   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   rC   Zputband)	r%   Úbufferr+   Zstrider,   r-   r*   ZbandrI   r   r   r   ÚdecodeË   s    
zSGI16Decoder.decodeN)r0   r1   r2   Z	_pulls_fdrS   r   r   r   r   rK   È   s   rK   r   z	image/sgiz.bwz.rgbz.rgbaz.sgi)r:   r@   r   r   r   Z_binaryr   r	   r   r   r   r   rJ   Z	PyDecoderrK   Zregister_decoderZregister_openr3   Zregister_saveZregister_mimeZregister_extensionsr   r   r   r   Ú<module>   s*   JK