o
    Z#ûaÑ  ã                	   @   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g d¢¡ dS )é    Né   )ÚImageÚ	ImageFile)Úi16be)Úo8c                 C   s   t | ƒdkot| ƒdkS )Né   éÚ  )ÚlenÚi16)Úprefix© r   ú4/usr/lib/python3/dist-packages/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 )ÚSgiImageFileÚSGIzSGI Image File Formatc              	   C   sp  d}| j  |¡}t|ƒstdƒ‚|d }|d }t|dƒ}t|dƒ}t|dƒ}t|dƒ}|||f}	d	}
zt|	 }
W n	 tyB   Y nw |
d	krKtd
ƒ‚||f| _|
 d¡d | _	| j	dkr`d| _
d}|dkr¢|| | }|dkr�dd| j || j	d|ffg| _d S g | _|}| j	D ]}| j dd| j ||d|ff¡ ||7 }q‰d S |dkr¶dd| j ||
||ffg| _d S d S )Né   zNot an SGI image filer   r   r   é   é   é
   Ú úUnsupported SGI image modeú;r   r   z	image/rgbéÿÿÿÿÚSGI16)r   r   Úrawr   Úsgi_rle)ÚfpÚreadr   Ú
ValueErrorr
   ÚMODESÚKeyErrorÚ_sizeÚsplitÚmodeÚcustom_mimetypeÚsizeÚtileÚappend)ÚselfÚheadlenÚsÚcompressionÚbpcÚ	dimensionÚxsizeÚysizeÚzsizeÚlayoutÚrawmodeÚorientationÚpagesizeÚoffsetÚlayerr   r   r   Ú_open8   sR   




ÿ


ÿ
ÿ
ü
ÿÿzSgiImageFile._openN)Ú__name__Ú
__module__Ú__qualname__ÚformatÚ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vr$tdƒ‚d	}d
}d}d}| j\}	}
| j dkr=|
dkr=d}n| j dkrDd}t| j ƒ}|dksQ|dkrSd}t|  ¡ ƒ|krit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}|  ¡ D ]}| | d|d|¡¡ �qt|dƒ�r#| ¡  d S d S )Nr   r   r   r   r2   r   )r   r   z%Unsupported number of bytes per pixelr   r   r   r   r   z(incorrect number of bands in SGI write: z vs éÿ   ÚasciiÚignorez>hz>Hz>lÚ4só    Ú79sr0   Ú404sr   r    Úflush)r)   r$   ÚencoderinfoÚgetr+   r	   ÚgetbandsÚosÚpathÚsplitextÚbasenameÚencodeÚwriteÚstructÚpackr   r(   ÚtobytesÚhasattrrJ   )Úimr"   ÚfilenameÚinfor2   r9   ÚmagicNumberÚrleÚdimÚxÚyÚzÚpinminÚpinmaxÚimgNameÚcolormapr8   Úchannelr   r   r   Ú_save}   sb   


ÿ
ÿrf   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 ]%}t	 
d| jj| jjf¡}| | j d| ¡dd||¡ | j |j|¡ qdS )Nr   r   r   r    r   )r   r   )ÚargsÚstater4   r5   r	   r)   ÚfdÚseekÚranger   ÚnewÚ	frombytesr#   rX   Úputband)	r.   Úbufferr8   Ústrider9   r:   r6   Úbandre   r   r   r   ÚdecodeË   s   
ÿzSGI16Decoder.decodeN)r>   r?   r@   Ú	_pulls_fdrs   r   r   r   r   rg   È   s    rg   r   z	image/sgi)z.bwz.rgbz.rgbaz.sgi)rN   rT   r   r   r   Ú_binaryr   r
   r   r   r%   r   rf   Ú	PyDecoderrg   Úregister_decoderÚregister_openrA   Úregister_saveÚregister_mimeÚregister_extensionsr   r   r   r   Ú<module>   s.   øJK