B
    -ac              
   @   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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)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-rysjrues/PIL/PsdImagePlugin.py_accept,   s    r   c               @   s@   e Zd ZdZdZdZdd Zd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|| _t|d	t|d
f| _	t|d}|r||}	|dkr|dkrt
d|	| _g | _t|d}|r~| j  | }
x| j  |
k r||d t|d}|t|d}t|d@ s0|d |t|d}	t|	d@ rV|d | j|||	f |dkr|	| jd< qW 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 channels      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_PsdImageFile__fpframeZ
_min_frame)selfr    sZpsd_bitsZpsd_channelsZpsd_moder%   channelsr5   dataendidnameZ_layer_datar   r   r   _open:   s`    


zPsdImageFile._openc          
   C   sx   |  |sd S y8| j|d  \}}}}|| _|| _|| _| j| _||fS  tk
rr } ztd|W d d }~X Y nX d S )Nr   zno such layer)	Z_seek_checkr.   r%   r6   r8   r7   r   
IndexErrorEOFError)r9   layerr?   r%   bboxr6   er   r   r   r3      s    
zPsdImageFile.seekc             C   s   | j S )N)r8   )r9   r   r   r   r*      s    zPsdImageFile.tellc             C   sR   | j r"| j j| jks"| j j| jkr8tj| j| jd| _ | jdkrNtj|  d S )Nr   r   )Zimr%   r5   r   corefillload)r9   r   r   r   load_prepare   s    "
zPsdImageFile.load_preparec             C   sB   z4y| j | jkr| j   W n tk
r0   Y nX W d d | _ X d S )N)r7   r   closeAttributeError)r9   r   r   r   
_close__fp   s    
zPsdImageFile._close__fpN)__name__
__module____qualname__formatformat_descriptionZ!_close_exclusive_fp_after_loadingr@   r3   r*   rI   rL   r   r   r   r   r   4   s   Pr   c          	      s  g } fdd}t |d}|t|d k r4tdxtt|D ]}t|d}t|d}t|d}t|d}	g }
g }t |d}tt|}t|dkrqDxR|D ]J}t |d}|dkrd}nd	| }|| t|d}|
||f qW |  |d
gkrd}n2|ddd
gkr,d}n|dddd
gkrDd	}nd }|d d}t|d}d}|r
 	 | }t|d}|r 
|d tj ||d 7 }t|d}|rƈ 
|tj ||d 7 }t|d}|r||dd}||d 7 } 
| ||||||	|ff qDW d}x^|D ]V\}}}g }x,|D ]$}t ||d}|rD|| qDW ||||f||< |d7 }q0W |S )Nc                s   t  | S )N)r   r1   )r5   )r   r   r   r       s    z_layerinfo.<locals>.readr      z4Layer block too short for number of layers requestedr   i  AZRGBARr
   BGr   r    r      r   zlatin-1replace)r!   absr"   ranger&   listr+   r,   sortr*   r3   r/   SEEK_CURr   decoder4   extend)r   Zct_bytesr.   r    ctiZy0Zx0y1x1r-   r%   Zct_typestypestypemr5   r?   ZcombinedZdata_endlengthrD   r6   tr   )r   r   r2      s|    



r2   c             C   sD  d }| j }t|d}|d |d  }|d |d  }|  }	|dkrg }xt|D ]:}
||
 }|dkrp|d7 }|d||	|f |	||  }	qTW n|dkr$d}g }||| d }|  }	xdt|D ]X}
||
 }|dkr|d7 }|d||	|f x(t|D ]}|	t|| }	|d7 }q W qW | |	 |	d@ r@|d |S )	Nr   r   r   r   r   z;Ir(   Zpackbits)r    r!   r*   r[   r,   r3   )filer%   rD   r;   r6   r    compressionZxsizeZysizeoffsetZchannelrC   rb   Z	bytecountyr   r   r   r4     s>    


r4   z.psdzimage/vnd.adobe.photoshop)r/   rW   r   r   r   _binaryr   r   r!   r   r&   r#   r   r   r2   r4   Zregister_openrP   Zregister_extensionZregister_mimer   r   r   r   <module>   s(   {^3