o
    fa                   
   @  s   d dl mZ d dlZd dlmZ ddlmZmZmZ ddl	m
Z
 ddl	mZ ddl	mZ dd	l	mZ dd
l	mZ dddddddddd	Zd ddZG dd dejZdd Zdd Zeejee eejd eejd dS )!    )annotationsN)cached_property   )Image	ImageFileImagePalette)i8)i16be)i32be)si16be)si32be)1r   )Lr   )Pr   )RGB   )CMYK   )LABr   )	)r   r   )r      )r   r   )   r   )r   r   )r   r   )   r   )r   r   )	   r   prefixbytesreturnboolc                 C  s   | d d dkS )Nr   s   8BPS )r   r   r   K/home/ubuntu/webapp/venv/lib/python3.10/site-packages/PIL/PsdImagePlugin.py_accept0   s   r   c                   @  s^   e Zd ZdZdZdZdddZedd	 Ze	dddZ
e	dddZdddZdddZdS )PsdImageFilePSDzAdobe PhotoshopFr   Nonec                 C  s&  | j j}|d}t|rt|ddkrd}t|t|d}t|d}t|d}t||f \}}||kr:d}t||d	krF|dkrFd
}d}|| _t|dt|df| _	t|d}	|	ro||	}
|dkro|	dkrot
d|
| _g | _t|d}	|	r| j  |	 }| j  |k r|d t|d}|t|d}t|d@ s|d |t|d}
t|
d@ r|d | j|||
f |dkr|
| jd< | j  |k sd | _t|d}	|	r| j  |	 }t|d}	|	r| j  | _|	| _| j | d | _t| j |d| j || _| j | _d| _d| _d S )N   r   r   znot a PSD file         znot enough channelsr   RGBA      r   i   zRGB;Lr   i  icc_profile)r   r   )fpreadr   i16SyntaxErrorMODESOSError_modei32_sizer   rawpalette	resourcestellr   lenappendinfo_layers_position_layers_sizeseek	_n_frames	_maketilesizetile_fpframe
_min_frame)selfr,   smsgpsd_bitspsd_channelspsd_modemodechannelsr@   dataendidnamer   r   r   _open=   sj   




zPsdImageFile._openc                 C  sL   g }| j d ur| j| j  tt| j| j}t|| j}t	|| _
|S N)r;   rB   r=   ioBytesIOr   
_safe_readr<   
_layerinfor8   r>   )rE   layers_layer_datar   r   r   rW      s   

zPsdImageFile.layersintc                 C  s   | j d u rt| j| _ | j S rR   )r>   r8   rW   rE   r   r   r   n_frames   s   
zPsdImageFile.n_framesr   c                 C  s   t | jdkS )Nr   )r8   rW   rZ   r   r   r   is_animated   s   zPsdImageFile.is_animatedlayerc              
   C  sl   |  |sd S z| j|d  \}}}}|| _|| _|| _| j| _W d S  ty5 } zd}t||d }~ww )Nr   zno such layer)	_seek_checkrW   r1   rA   rC   rB   r+   
IndexErrorEOFError)rE   r]   _rK   rA   erG   r   r   r   r=      s   

zPsdImageFile.seekc                 C  s   | j S rR   )rC   rZ   r   r   r   r7      s   zPsdImageFile.tellN)r   r"   )r   rY   )r   r   )r]   rY   r   r"   )__name__
__module____qualname__formatformat_description!_close_exclusive_fp_after_loadingrQ   r   rW   propertyr[   r\   r=   r7   r   r   r   r   r    8   s    
S
	
r    c              	     sJ  g } fdd}t |d}|t|d k rd}t|tt|D ]}t|d}t|d}t|d}	t|d}
g }t|d}|dkra |d d tj t	|d} |tj q"t|D ]}t|d}|d	krtd
}nd| }|
| |d qe|  |dgkrd}n|g dkrd}n|g dkrd}nd }|d d}t	|d}|r  | }t	|d}|rǈ |d tj t	|d}|rֈ |tj t|d}|r||dd} | |
|||||
|	ff q"t|D ]&\}\}}}g }|D ]}t ||d}|r|| q||||f||< q|S )Nc                   s   t  | S rR   )r   rU   )r@   r+   r   r   r,      s   z_layerinfo.<locals>.readr      z4Layer block too short for number of layers requestedr      r%   i  Ar'   Rr   )BGrn   r   )rm   ro   rp   rn       r   zlatin-1replace)si16absr.   rangesi32r-   r=   rS   SEEK_CURr2   r9   sortr7   r   decode	enumerater?   extend)r+   ct_bytesrW   r,   ctrG   ra   y0x0y1x1rK   ct_typesr@   typemrP   data_endlengthibboxrA   tr   rj   r   rV      st   




rV   c                 C  s2  d }| j }t|d}|d |d  }|d |d  }|  }	|dkrHg }t|D ]}
||
 }|dkr7|d7 }|d||	|f |	||  }	q)nB|dkrd}g }||| d }|  }	t|D ])}
||
 }|dkrn|d7 }|d||	|f t|D ]}|	t|| }	|d7 }q{q`| |	 |	d@ r|d |S )	Nr   r   r   r   r   z;Ir4   packbits)r,   r-   r7   rv   r9   r=   )filerK   r   rL   rA   r,   compressionxsizeysizeoffsetchannelr]   r   	bytecountyr   r   r   r?     sB   

r?   z.psdzimage/vnd.adobe.photoshop)r   r   r   r   )
__future__r   rS   	functoolsr   rq   r   r   r   _binaryr   r	   r-   r
   r2   r   rt   r   rw   r/   r   r    rV   r?   register_openrf   register_extensionregister_mimer   r   r   r   <module>   s6   
 X2