3
	jQc                 @   s   d 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$d%d&d'd(d)d*d+d,i	Zdd ZG dd dejZdd Zdd Zejejee ejejd dS )-z0.4   )Image	ImageFileImagePalette)i8i16bei32be    1   L   P   RGB   CMYK   	   LABc             C   s   | d d dkS )Nr   s   8BPS )prefixr   r   4/usr/lib/python3/dist-packages/PIL/PsdImagePlugin.py_accept)   s    r   c               @   sL   e 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S )PsdImageFileZPSDzAdobe Photoshopc             C   sB  | 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	j
d|	| _g | _t|d}|r| j j | }
x| j j |
k r|d}t|d}|t|d}t|d@ s\|d |t|d}	t|	d@ r|d | jj|||	f |dkr|	| jd< qW g | _t|d}|r| j j | }
t|d}|rtjtj| j |}t||| _| j j|
 t| j |d| j || _| j | _d| _d| _d S )N   r   s   8BPSr   znot a PSD file         znot enough channels      r   i   zRGB;Lr   i  Zicc_profiler   )r   r   )fpreadi16SyntaxErrorMODESIOErrormodei32sizer   rawZpaletteZ	resourcestellr   lenappendinfolayersioBytesIOr   
_safe_read
_layerinfoseek	_maketiletile_fpframeZ
_min_frame)selfr!   sZpsd_bitsZpsd_channelsZpsd_moder&   channelsr(   dataendZ	signatureidnameZ_layer_datar   r   r   _open5   s\    $"
zPsdImageFile._openc             C   s
   t | jS )N)r+   r.   )r8   r   r   r   n_frames   s    zPsdImageFile.n_framesc             C   s   t | jdkS )Nr   )r+   r.   )r8   r   r   r   is_animated   s    zPsdImageFile.is_animatedc             C   sh   | j |sd S y8| j|d  \}}}}|| _|| _|| _| j| _||fS  tk
rb   tdY nX d S )Nr   zno such layer)	Z_seek_checkr.   r&   r5   r7   r6   r    
IndexErrorEOFError)r8   layerr>   r&   bboxr5   r   r   r   r3      s    
zPsdImageFile.seekc             C   s   | j S )N)r7   )r8   r   r   r   r*      s    zPsdImageFile.tellc             C   sT   | j  s$| j j| jks$| j j| jkr:tjj| j| jd| _ | jdkrPtjj|  d S )Nr   r   )Zimr&   r(   r   ZcoreZfillload)r8   r   r   r   load_prepare   s
    
zPsdImageFile.load_prepareN)__name__
__module____qualname__formatZformat_descriptionr?   propertyr@   rA   r3   r*   rG   r   r   r   r   r   0   s   Nr   c                s  g } fdd}t |d}|t|d k r4tdx"t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	| }|j| t|d}|
j||f qW |j  |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> j	 | }t|d}|rt|d}t|d}t|d| }t|d| } j
|d d ||d 7 }t|d}|r j
|d ||d 7 }t|d}|r(||jdd}||d 7 } j
| |j|||||	|ff qDW d}x^|D ]V\}}}g }x,|D ]$}t ||d}|rx|j| qxW ||||f||< |d7 }qdW |S )Nc                s   t j | S )N)r   r1   )r(   )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   decoder4   extend)r    Zct_bytesr.   r!   ZctiZy0Zx0Zy1Zx1r-   r&   Zct_typestypestypemr(   Zfillerr>   ZcombinedZdata_endZlengthZmask_yZmask_xZmask_hZmask_wrE   r5   tr   )r    r   r2      s    



r2   c             C   sN  d }| j }t|d}|d |d  }|d |d  }| j }	|dkrg }xt|D ]:}
||
 }|dkrp|d7 }|jd||	|f |	||  }	qTW n|dkr.d}g }||| d }| j }	xnt|D ]b}
||
 }|dkr|d7 }|jd||	|f x2t|D ]&}|	t|||d   }	|d7 }q W qW | j|	 |	d@ rJ|d |S )	Nr   r   r   r   r   z;Ir)   Zpackbits)r!   r"   r*   rV   r,   r3   )filer&   rE   r:   r5   r!   ZcompressionZxsizeZysizeoffsetZchannelrD   r[   Z	bytecountyr   r   r   r4   	  s@    


r4   z.psdN)r   r   )r	   r   )r   r
   )r   r   )r   r
   )r   r   )r   r
   )r   r   )r   r
   )r   r   )r   r
   )r   r   )r   r
   )r   r   )r
   r
   )r   r   )r   r
   )r   r   )__version__rR   r   r   r   Z_binaryr   r   r"   r   r'   r$   r   r   r2   r4   Zregister_openrK   Zregister_extensionr   r   r   r   <module>   s"   wb4