U
    ڲga                   
   @  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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   )ZLABr   )	)r   r   )r      )r   r   )   r   )r   r   )r   r   )   r   )r   r   )	   r   bytesbool)prefixreturnc                 C  s   | d d dkS )Nr   s   8BPS )r   r   r   6/tmp/pip-unpacked-wheel-xela2va7/PIL/PsdImagePlugin.py_accept0   s    r   c                   @  st   e Zd ZdZdZdZddddZe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._openc                 C  sL   g }| j d k	r>| j| j  tt| j| j}t|| j}t	|| _
|S N)r7   r>   r9   ioBytesIOr   
_safe_readr8   
_layerinfor4   r:   )r@   layersZ_layer_datar   r   r   rO      s    

zPsdImageFile.layersintc                 C  s   | j d krt| j| _ | j S rJ   )r:   r4   rO   r@   r   r   r   n_frames   s    
zPsdImageFile.n_framesr   c                 C  s   t | jdkS )Nr   )r4   rO   rQ   r   r   r   is_animated   s    zPsdImageFile.is_animated)layerr   c              
   C  sx   |  |sd S z4| j|d  \}}}}|| _|| _|| _| j| _W n0 tk
rr } zd}t||W 5 d }~X Y nX d S )Nr   zno such layer)	Z_seek_checkrO   r.   r=   r?   r>   r(   
IndexErrorEOFError)r@   rT   _rC   r=   erB   r   r   r   r9      s    
zPsdImageFile.seekc                 C  s   | j S rJ   )r?   rQ   r   r   r   r3      s    zPsdImageFile.tellN)__name__
__module____qualname__formatformat_descriptionZ!_close_exclusive_fp_after_loadingrI   r   rO   propertyrR   rS   r9   r3   r   r   r   r   r   8   s   S
	r   c              	     sb  g } fdd}t |d}|t|d k r8d}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 qDt|D ]8}t|d}|d	krd
}nd| }|
| |d q|  |dgkr d}n2|dddgkr6d}n|d
dddgkrNd}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 qDt|D ]N\}\}}}g }|D ]$}t ||d}|r$|| q$||||f||< q|S )Nc                   s   t  | S rJ   )r   rM   )r<   r(   r   r   r)      s    z_layerinfo.<locals>.readr      z4Layer block too short for number of layers requestedr      r#   i  Ar%   Rr   BGr       r   zlatin-1replace)si16absr+   rangesi32r*   r9   rK   SEEK_CURr/   r5   sortr3   r   decode	enumerater;   extend)r(   Zct_bytesrO   r)   ctrB   rW   Zy0Zx0y1x1rC   Zct_typesr<   typemrH   Zdata_endlengthibboxr=   tr   r_   r   rN      sr    


rN   c                 C  s6  d }| j }t|d}|d |d  }|d |d  }|  }	|dkrg }t|D ]:}
||
 }|dkrn|d7 }|d||	|f |	||  }	qRn|dkrd}g }||| d }|  }	t|D ]R}
||
 }|dkr|d7 }|d||	|f t|D ]}|	t|| }	|d7 }qq| |	 |	d@ r2|d |S )	Nr   r   r   r   r   z;Ir1   Zpackbits)r)   r*   r3   rk   r5   r9   )filerC   ry   rD   r=   r)   compressionZxsizeZysizeoffsetZchannelrT   rx   Z	bytecountyr   r   r   r;     s>    


r;   z.psdzimage/vnd.adobe.photoshop)
__future__r   rK   	functoolsr   rf   r   r   r   _binaryr   r	   r*   r
   r/   r   ri   r   rl   r,   r   r   rN   r;   Zregister_openr\   Zregister_extensionZregister_mimer   r   r   r   <module>   s4    X2