U
    &^                  
   @   s   d dl Z ddlmZmZmZ ddlmZmZ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 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      8BPS )prefixr   r   6/tmp/pip-install-a1j0c_p1/Pillow/PIL/PsdImagePlugin.py_accept*   s    r   c                   @   sX   e Zd ZdZdZdZdd Zedd Ze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}|d d dks4t|dd  dkr<tdt|dd  }t|dd  }t|dd  }t||f \}}||krtd	|| _t|d
d  t|d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@ sZ|d |t|d}	t|	d@ r|d | j|||	f |dkr|	| jd< qg | _t|d}|r| j  | }
t|d}|rt| j | _| j |
 t| j |d| j || _| j | _d| _d| _d S )N   r   r   r   znot a PSD file         znot enough channels      r   i   zRGB;Lr   i  Zicc_profile)r   r   )fpreadi16SyntaxErrorMODESOSErrormodei32_sizer   rawZpalette	resourcestellr   lenappendinfolayers
_layerinfoseek	_maketilesizetile_PsdImageFile__fpframeZ
_min_frame)selfr!   sZpsd_bitsZpsd_channelsZpsd_moder&   channelsr3   dataendidnamer   r   r   _open8   sZ    $"
zPsdImageFile._openc                 C   s
   t | jS Nr,   r/   r7   r   r   r   n_frames   s    zPsdImageFile.n_framesc                 C   s   t | jdkS )Nr   r@   rA   r   r   r   is_animated   s    zPsdImageFile.is_animatedc                 C   sj   |  |sd S z:| j|d  \}}}}|| _|| _|| _| j| _||fW S  tk
rd   tdY nX d S )Nr   zno such layer)	Z_seek_checkr/   r&   r4   r6   r5   r    
IndexErrorEOFError)r7   layerr=   r&   bboxr4   r   r   r   r1      s    

zPsdImageFile.seekc                 C   s   | j S r?   )r6   rA   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&   r3   r   corefillloadrA   r   r   r   load_prepare   s    "
zPsdImageFile.load_preparec                 C   sB   z4z| j | jkr| j   W n tk
r0   Y nX W 5 d | _ X d S r?   )r5   r    closeAttributeErrorrA   r   r   r   
_close__fp   s    
zPsdImageFile._close__fpN)__name__
__module____qualname__formatformat_descriptionZ!_close_exclusive_fp_after_loadingr>   propertyrB   rC   r1   r+   rK   rN   r   r   r   r   r   2   s   M

r   c              	   C   sR  g }| j }ttt|dD ]}t|d}t|d}t|d}t|d}g }g }	ttt|d}
t|
dkr~q|
D ]J}t|d}|dkrd}nd| }|	| t|d}|||f q|	  |	dgkrd}	n0|	dd	dgkrd
}	n|	ddd	dgkrd}	nd }	|d d}t|d}d}|r| 	 | }t|d}|rh| 
|d tj ||d 7 }t|d}|r| 
|tj ||d 7 }t|d}|r||dd}||d 7 }| 
| |||	||||ff qd}|D ]R\}}	}g }|	D ]$}t| ||d}|r|| q||	||f||< |d7 }q|S )Nr   r   i  AZRGBARr
   BGr   r    r      r   zlatin-1replace)r!   rangeabsr"   r'   listr,   r-   sortr+   r1   ioSEEK_CURr   decoder2   extend)filer/   r!   iZy0Zx0y1x1r.   r&   typestypemr3   r=   ZcombinedZdata_endlengthrG   r4   tr   r   r   r0      st    


r0   c                 C   s@  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 ]\}
||
 }|dkr|d7 }|d||	|f t|D ]$}|	t|||d   }	|d7 }qq| |	 |	d@ r<|d |S )	Nr   r   r   r   r   z;Ir)   Zpackbits)r!   r"   r+   r\   r-   r1   )rd   r&   rG   r9   r4   r!   compressionZxsizeZysizeoffsetZchannelrF   re   Z	bytecountyr   r   r   r2     s>    


r2   z.psd)r`   rY   r   r   r   _binaryr   r   r"   r   r'   r$   r   r   r0   r2   Zregister_openrR   Zregister_extensionr   r   r   r   <module>   s&    T3