o
    e(                  	   @  s   d dl mZ 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 )    )annotationsN   )Image	ImageFile)i16be)o8c                 C  s   t | dkot| dkS )N     )leni16)prefix r   E/var/www/html/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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  s6  | j dvrd}t|| j}|dd}|dvrd}t|d}d}d	}d
}	| j\}
}| j dkr7|dkr7d}	n| j dkr>d}	t| j }|	dv rId}t|  |krad| 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rd}|  D ]}||d|d	| qt|dr|  d S d S )N>   r   r   r   r   r5   r   )r   r   z%Unsupported number of bytes per pixelr   r	   r   r   r   r   >   r   r   z(incorrect number of bands in SGI write: z vs    asciiignorez>hz>Hz>l4s    79sr2   404sr   r!   flush)r+   r%   encoderinfogetr-   r
   getbandsospathsplitextbasenameencodewritestructpackr   r)   tobyteshasattrrM   )imr#   filenamer3   infor5   r<   magic_numberrledimxyzpinminpinmaximg_namecolormapr;   channelr   r   r   _save}   sd   



ri   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stater7   r8   r
   r+   fdseekranger   new	frombytesr$   r[   putband)	r0   bufferr;   strider<   r=   r9   bandrh   r   r   r   decode   s   
zSGI16Decoder.decodeN)rA   rB   rC   	_pulls_fdrv   r   r   r   r   rj      s    rj   r    z	image/sgi)z.bwz.rgbz.rgbaz.sgi)
__future__r   rQ   rW   r   r   r   _binaryr   r   r   r   r&   r   ri   	PyDecoderrj   register_decoderregister_openrD   register_saveregister_mimeregister_extensionsr   r   r   r   <module>   s0   JL