U
    ’~Hja   ã                
   @  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-djfamcny/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rŒd
}d}|| _t|dƒt|dƒf| _	t|dƒƒ}	|	rÞ||	ƒ}
|dkrÞ|	dkrÞt
 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rêd
}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r�g }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 }qøqÂ|  |	¡ |	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