3

Z                 @   s   d dl mZmZ d dlmZmZmZ ddlZddl	Z	dZ
dd Zddddd d
d!d
d"dd#dd$dd%diZG dd dejZdd ZG dd dejZejde ejejee ejeje ejejd ejejd ejejddddg dS )&   )Image	ImageFile)i8o8i16be    Nz0.3c             C   s   t | dkot| dkS )N   i  )leni16)prefix r   4/usr/lib/python3/dist-packages/PIL/SgiImagePlugin.py_accept"   s    r   Lr   zL;16B   RGBzRGB;16B   RGBAzRGBA;16Bc               @   s   e Zd ZdZdZdd ZdS )SgiImageFileZSGIzSGI Image File Formatc             C   s  d}| j 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rtd||f| _|
jdd | _	d}|dkr`|| | }|dkrdd| j || j	d|ffg| _
nDg | _
|}x`| j	D ].}| j
jdd| j ||d|ff ||7 }q,W n&|dkrdd| j ||
||ffg| _
d S )Ni   i  zNot an SGI image filer   r   r         
    zUnsupported SGI image mode;r   r   SGI16rawZsgi_rle)r   r   )r   r   )r   r   )fpreadr
   
ValueErrorr   MODESKeyErrorsizesplitmodeZtileappend)selfZheadlensZcompressionbpcZ	dimensionxsizeysizezsizeZlayoutrawmodeorientationpagesizeoffsetZlayerr   r   r   _open9   sH    







zSgiImageFile._openN)__name__
__module____qualname__formatZformat_descriptionr0   r   r   r   r   r   4   s   r   c             C   sD  | j dkr&| j dkr&| j dkr&td| j}|jdd}|dkrHtdd}d	}d
}d}| j\}	}
| j dkrz|
dkrzd}n| j dkrd}t| j }|dks|dkrd}t| j |krtd|t| j f d
}d}tjj	tjj
|d
 }ttk	r|jdd}d
}|jtjd| |jt| |jt| |jtjd| |jtjd|	 |jtjd|
 |jtjd| |jtjd| |jtjd| |jtjdd |jtjd| |jtjdd |jtjd| |jtjdd d}|dkrd}x(| j D ]}|j|jd|d
| qW |j  d S )Nr   r   r   zUnsupported SGI image moder(   r   r   z%Unsupported number of bytes per pixeli  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   r   )r$   r   Zencoderinfogetr"   r	   Zgetbandsospathsplitextbasenamestrbytes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^    




rL   c               @   s   e Zd ZdZdd ZdS )SGI16DecoderTc       	      C   s   | j \}}}| jj| jj }t| j}| jjd xVt|D ]J}t	j
d| jj| jjf}|j| jjd| dd|| | jj|j| q<W d	S )
Ni   r   r   r   zL;16Br   r   r   )r   r   )argsstater)   r*   r	   r$   fdseekranger   newZ	frombytesr   rE   Zputband)	r&   bufferr,   Zstrider-   r.   r+   ZbandrK   r   r   r   decode   s    

zSGI16Decoder.decodeN)r1   r2   r3   Z	_pulls_fdrU   r   r   r   r   rM      s   rM   r   z	image/sgiz	image/rgbz.bwz.rgbz.rgbaz.sgi)r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   Z_binaryr   r   r   r
   rB   r:   __version__r   r    r   rL   Z	PyDecoderrM   Zregister_decoderZregister_openr4   Zregister_saveZregister_mimeZregister_extensionsr   r   r   r   <module>   s,   GJ