o
    gHd"                  	   @   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   Y/var/www/html/facialservice/flask-venv/lib/python3.10/site-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   sx  d}| j |}t|sd}t||d }|d }t|d}t|d}t|d}t|d}	|||	f}
d	}zt|
 }W n	 tyD   Y nw |d	krOd
}t|||f| _|dd | _	| j	dkrdd| _
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msgcompressionbpc	dimensionxsizeysizezsizelayoutrawmodeorientationpagesizeoffsetlayerr   r   r   _open7   sV   










zSgiImageFile._openN)__name__
__module____qualname__formatformat_descriptionr>   r   r   r   r   r   3   s    r   c              	   C   sV  | j dkr| j dkr| j dkrd}t|| j}|dd}|dvr(d}t|d	}d
}d}d}	| j\}
}| j dkrA|dkrAd}	n| j dkrHd}	t| j }|	dksU|	dkrWd}t|  |krod| dt|   }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   r3   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hasattrrK   )imr"   filenamer1   infor3   r:   magic_numberrledimxyzpinminpinmaximg_namecolormapr9   channelr   r   r   _save}   sd   



rg   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stater5   r6   r	   r)   fdseekranger   new	frombytesr#   rY   putband)	r.   bufferr9   strider:   r;   r7   bandrf   r   r   r   decode   s   
zSGI16Decoder.decodeN)r?   r@   rA   	_pulls_fdrt   r   r   r   r   rh      s    rh   r   z	image/sgi)z.bwz.rgbz.rgbaz.sgi)rO   rU   r   r   r   _binaryr   r
   r   r   r%   r   rg   	PyDecoderrh   register_decoderregister_openrB   register_saveregister_mimeregister_extensionsr   r   r   r   <module>   s.   JL