U
    Evf                  
   @  s   d dl mZ d dl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 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   )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   c                 C  s   | d d dkS )Nr   s   8BPS )prefixr   r   6/tmp/pip-unpacked-wheel-ciywl2yd/PIL/PsdImagePlugin.py_accept/   s    r   c                   @  s0   e Zd ZdZdZdZdd Zdd Zdd	 Zd
S )PsdImageFileZPSDzAdobe PhotoshopFc                 C  sJ  | 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g | _t|d}	|	r| j  |	 }t|d}	|	rtt| j |	}t||	| _| j | t| j| _| jdk| _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ioBytesIOr   
_safe_read
_layerinfoseekZn_framesZis_animated	_maketilesizetile_fpframeZ
_min_frame)selfr$   smsgZpsd_bitsZpsd_channelsZpsd_modemodechannelsr9   dataendidnameZ_layer_datar   r   r   _open<   sj    



zPsdImageFile._openc              
   C  s~   |  |sd S z:| j|d  \}}}}|| _|| _|| _| j| _||fW S  tk
rx } zd}t||W 5 d }~X Y nX d S )Nr   zno such layer)	Z_seek_checkr2   r)   r:   r<   r;   r#   
IndexErrorEOFError)r=   layerrE   r@   bboxr:   er?   r   r   r   r7      s    

zPsdImageFile.seekc                 C  s   | j S N)r<   )r=   r   r   r   r.      s    zPsdImageFile.tellN)	__name__
__module____qualname__formatformat_descriptionZ!_close_exclusive_fp_after_loadingrF   r7   r.   r   r   r   r   r   7   s   T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 rL   )r   r5   )r9   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%   r7   r3   SEEK_CURr*   r0   sortr.   r   decode	enumerater8   extend)r#   Zct_bytesr2   r$   ctr?   _Zy0Zx0y1x1r@   Zct_typesr9   typemrE   Zdata_endlengthirJ   r:   tr   rR   r   r6      sr    


r6   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;Ir,   Zpackbits)r$   r%   r.   r^   r0   r7   )filer@   rJ   rA   r:   r$   compressionZxsizeZysizeoffsetZchannelrI   rl   Z	bytecountyr   r   r   r8      s>    


r8   z.psdzimage/vnd.adobe.photoshop)
__future__r   r3   rY   r   r   r   _binaryr   r   r%   r	   r*   r
   r\   r   r_   r'   r   r   r6   r8   Zregister_openrP   Zregister_extensionZregister_mimer   r   r   r   <module>   s0   nX2