a
    h!                  
   @  s  d dl mZ d dlZd dlm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lmZ dddddddddd	ZdddddZG dd de	j	Zdddddd Zdd!d"dd#d$d%d&Zeejee eejd' eejd( dS ))    )annotationsN)cached_property)IO   )Image	ImageFileImagePalette)i8)i16be)i32be)si16be)si32be)DeferredError)1r   )Lr   )Pr   )RGB   )CMYK   )ZLABr   )	)r   r   )r      )r   r   )   r   )r   r   )r   r   )   r   )r   r   )	   r   bytesbool)prefixreturnc                 C  s
   |  dS )Ns   8BPS)
startswith)r    r   @/var/www/auris/lib/python3.9/site-packages/PIL/PsdImagePlugin.py_accept2   s    r!   c                   @  sz   e Zd ZdZdZdZddddZeddd	d
Ze	ddddZ
e	ddddZdddddZddddZdS )PsdImageFileZPSDzAdobe PhotoshopFNone)r   c                 C  s*  | j j}|d}t|r&t|ddkr2d}t|t|d}t|d}t|d}t||f \}}||krtd}t||d	kr|dkrd
}d}|| _t|dt|df| _	t|d}	|	r||	}
|dkr|	dkrt
d|
| _g | _t|d}	|	r| j  |	 }| j  |k r|d t|d}|t|d}t|d@ sN|d |t|d}
t|
d@ rt|d | j|||
f |dkr|
| jd< qd | _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  Zicc_profile)r   r   )fpreadr!   i16SyntaxErrorMODESOSError_modei32_sizer   rawZpalette	resourcestellr	   lenappendinfo_layers_position_layers_sizeseek	_n_frames	_maketilesizetile_fpframeZ
_min_frame)selfr,   smsgZpsd_bitsZpsd_channelsZpsd_modemodechannelsr?   dataendidnamer   r   r    _open?   sh    



zPsdImageFile._openGlist[tuple[str, str, tuple[int, int, int, int], list[ImageFile._Tile]]]c                 C  s`   g }| j d urRt| jtr"| jj| j| j  tt	| j| j
}t|| j
}t|| _|S N)r:   
isinstancerA   r   exr<   ioBytesIOr   
_safe_readr;   
_layerinfor7   r=   )rC   layersZ_layer_datar   r   r    rU      s    

zPsdImageFile.layersintc                 C  s   | j d u rt| j| _ | j S rN   )r=   r7   rU   rC   r   r   r    n_frames   s    
zPsdImageFile.n_framesr   c                 C  s   t | jdkS Nr   )r7   rU   rW   r   r   r    is_animated   s    zPsdImageFile.is_animated)layerr   c                 C  sV   |  |sd S t| jtr"| jj| j|d  \}}}}|| _|| _|| _| j| _	d S rY   )
Z_seek_checkrO   rA   r   rP   rU   r1   r@   rB   r+   )rC   r[   _rF   r@   r   r   r    r<      s    
zPsdImageFile.seekc                 C  s   | j S rN   )rB   rW   r   r   r    r6      s    zPsdImageFile.tellN)__name__
__module____qualname__formatformat_descriptionZ!_close_exclusive_fp_after_loadingrL   r   rU   propertyrX   rZ   r<   r6   r   r   r   r    r"   :   s   Sr"   z	IO[bytes]rV   rM   )r+   ct_bytesr   c              	     sj  g }ddd 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r̈ |d
 d tj t	|d	} |tj qLt|D ]8}t|d}|dkrd}nd| }|
| |d	 q|  |dgkr(d}n,|g dkr<d}n|g dkrPd}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 qLg }t|D ]P\}\}}}g }|D ]$}t ||d}|r*|| q*|
||||f q|S )NrV   r   )r?   r   c                   s   t  | S rN   )r   rS   )r?   r+   r   r    r,      s    z_layerinfo.<locals>.readr      z4Layer block too short for number of layers requestedr      r&   i  Ar(   Rr   )BGrh   r   )rg   ri   rj   rh       r   zlatin-1replace)si16absr.   rangesi32r-   r<   rQ   SEEK_CURr2   r8   sortr6   r	   decode	enumerater>   extend)r+   rc   rU   r,   ctrE   r\   Zy0Zx0y1x1ZbandsZct_typesr?   typebrF   rK   Zdata_endlengthZ	layerinfoibboxr@   mtr   rd   r    rT      st    


rT   strztuple[int, int, int, int]zlist[ImageFile._Tile])filerF   r~   rG   r   c              	   C  s6  g }| j }t|d}|d |d  }|d |d  }|  }	|dkrt|D ]>}
||
 }|dkrj|d7 }|td||	| |	||  }	qNn|dkrd}||| d }|  }	t|D ]V}
||
 }|dkr|d7 }|td||	| t|D ]}|	t|| }	|d7 }qq| |	 |	d@ r2|d |S )	Nr   r   r   r   r   z;Ir4   Zpackbits)r,   r-   r6   rp   r8   r   Z_Tiler<   )r   rF   r~   rG   Ztilesr,   compressionZxsizeZysizeoffsetZchannelr[   r}   Z	bytecountyr   r   r    r>     s:    


r>   z.psdzimage/vnd.adobe.photoshop) 
__future__r   rQ   	functoolsr   typingr   rk   r   r   r   _binaryr	   r
   r-   r   r2   r   rn   r   rq   Z_utilr   r/   r!   r"   rT   r>   Zregister_openr`   Zregister_extensionZregister_mimer   r   r   r    <module>   s8    [2