o
    h                  	   @  s   d dl mZ d dlZd dlZd dlmZ ddlmZmZ ddl	m
Z ddl	mZ d%ddZdddddddddZG dd dejZd&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 )'    )annotationsN)IO   )Image	ImageFile)i16be)o8prefixbytesreturnboolc                 C  s   t | dkot| dkS )N     )leni16)r	    r   T/var/www/html/optinet_system/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dZdS )	SgiImageFileSGIzSGI Image File Formatr   Nonec                 C  s~  | j d usJ d}| j |}t|sd}t||d }|d }t|d}t|d}t|d}t|d}	z	t|||	f }
W n tyK   d	}t|w ||f| _|
d
d | _	| j
dkrad| _d}|dkr|| | }|dkrtdd| j || j
d|fg| _d S g | _|}| j
D ]}| jtdd| j ||d|f ||7 }qd S |dkrtdd| j ||
||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modecustom_mimetyper   _Tilesizetileappend)selfheadlensmsgcompressionbpc	dimensionxsizeysizezsizerawmodeorientationpagesizeoffsetlayerr   r   r   _open8   sb   







	


zSgiImageFile._openN)r   r   )__name__
__module____qualname__formatformat_descriptionrD   r   r   r   r   r   4   s    r   imImage.Imager'   	IO[bytes]filenamestr | bytesr   c              	   C  s  | j dvrd}t|| j}|dd}|dvrd}t|d}d}d	}| j\}	}
t| j }| j d
kr<|
dkr9dnd}nd}d	}d}tjtj	|d	 }t
|trY|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rd}|  D ]}||d|d	| qt|dr|  d S d S )N>   r   r   r   r!   r:   r   )r   r   z%Unsupported number of bytes per pixelr#   r   r   r   r   r      asciiignorez>hz>Hz>l4s    79sr7   404sr   r%   flush)r/   r)   encoderinfogetr2   r   ospathsplitextbasename
isinstancestrencodewritestructpackr   r-   tobyteshasattrrV   )rJ   r'   rM   r8   infor:   r@   magic_numberrlexyzr;   pinminpinmaximg_namecolormapr?   channelr   r   r   _save   sX   





rp   c                   @  s   e Zd ZdZd	ddZdS )
SGI16DecoderTbuffer$bytes | Image.SupportsArrayInterfacer   tuple[int, int]c           	      C  s   | j d usJ | jd usJ | 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   )fdrJ   argsstater<   r=   r   r/   seekranger   new	frombytesr(   putband)	r5   rr   r?   strider@   rA   r>   bandro   r   r   r   decode   s   
zSGI16Decoder.decodeN)rr   rs   r   rt   )rE   rF   rG   	_pulls_fdr   r   r   r   r   rq      s    rq   r$   z	image/sgi)z.bwz.rgbz.rgbaz.sgi)r	   r
   r   r   )rJ   rK   r'   rL   rM   rN   r   r   )
__future__r   rY   ra   typingr    r   r   _binaryr   r   r   r   r*   r   rp   	PyDecoderrq   register_decoderregister_openrH   register_saveregister_mimeregister_extensionsr   r   r   r   <module>   s2   

ND