U
    Qtc(                  
   @   s   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	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 )    N   )Image	ImageFileImagePalette)i8)i16be)i32be)si16be)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-h5vj885l/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   s>  | j j}|d}t|r&t|ddkr.tdt|d}t|d}t|d}t||f \}}||krltd|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@ sF|d |t|d}	t|	d@ rl|d | j|||	f |dkr|	| jd< qg | _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"   sZpsd_bitsZpsd_channelsZpsd_moder'   channelsr7   dataendidnameZ_layer_datar   r   r   _open;   sf    


zPsdImageFile._openc              
   C   sz   |  |sd S z:| j|d  \}}}}|| _|| _|| _| j| _||fW S  tk
rt } ztd|W 5 d }~X Y nX d S )Nr   zno such layer)	Z_seek_checkr0   r'   r8   r:   r9   r!   
IndexErrorEOFError)r;   layerrA   r'   bboxr8   er   r   r   r5      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_loadingrB   r5   r,   r   r   r   r   r   5   s   Sr   c              	      s<  g } fdd}t |d}|t|d k r4tdtt|D ]}t|d}t|d}t|d}t|d}	g }
t|d}tt|}t|dkrq@|D ]8}t|d}|dkrd}nd	| }|
| |d q|
	  |
d
gkrd}
n2|
ddd
gkrd}
n|
dddd
gkr$d	}
nd }
|d d}t|d}|r 
 | }t|d}|rv |d tj t|d}|r |tj t|d}|r||dd} | |||
|||	|ff q@d}|D ]R\}}
}g }|
D ]$}t ||d}|r|| q||
||f||< |d7 }q|S )Nc                    s   t  | S rH   )r   r3   )r7   r!   r   r   r"      s    z_layerinfo.<locals>.readr      z4Layer block too short for number of layers requestedr   i  Ar   Rr   BGr   r       r   zlatin-1replacer   )si16absr$   ranger(   r#   listr-   r.   sortr,   r5   r1   SEEK_CURr   decoder6   extend)r!   Zct_bytesr0   r"   ct_Zy0Zx0y1x1r'   Zct_typestypestypemrA   r7   Zdata_endlengthirF   r8   tr   rN   r   r4      sp    



r4   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,   rY   r.   r5   )filer'   rF   r=   r8   r"   compressionZxsizeZysizeoffsetZchannelrE   rg   Z	bytecountyr   r   r   r6      s>    


r6   z.psdzimage/vnd.adobe.photoshop)r1   rT   r   r   r   _binaryr   r   r#   r   r(   r	   rW   r%   r   r   r4   r6   Zregister_openrL   Zregister_extensionZregister_mimer   r   r   r   <module>   s,   mX3