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rdd| j || j	d|ffg| _d S g | _|}| j	D ]}| jdd| j ||d|ff ||7 }qd S |dkrd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