B
    0\              
   @   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
	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 )z0.4   )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   c             C   s   | d d dkS )Nr   s   8BPS )prefixr   r   1lib/python3.7/site-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   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  | }
x| j  |
k r|d t|d}|t|d}t|d@ s\|d |t|d}	t|	d@ r|d | j|||	f |dkr|	| jd< qW g | _t|d}|r| j  | }
t|d}|rt| 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_profile)r   r   )fpreadi16SyntaxErrorMODESIOErrormodei32Z_sizer   rawZpaletteZ	resourcestellr   lenappendinfolayers
_layerinfoseek	_maketilesizetile_fpframeZ
_min_frame)selfr    sZpsd_bitsZpsd_channelsZpsd_moder%   channelsr0   dataendidnamer   r   r   _open5   sZ    $"
zPsdImageFile._openc             C   s
   t | jS )N)r)   r,   )r4   r   r   r   n_frames   s    zPsdImageFile.n_framesc             C   s   t | jdkS )Nr   )r)   r,   )r4   r   r   r   is_animated   s    zPsdImageFile.is_animatedc             C   sh   |  |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%   r1   r3   r2   r   
IndexErrorEOFError)r4   layerr:   r%   bboxr1   r   r   r   r.      s    
zPsdImageFile.seekc             C   s   | j S )N)r3   )r4   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%   r0   r   ZcoreZfillload)r4   r   r   r   load_prepare   s
    
zPsdImageFile.load_prepareN)__name__
__module____qualname__formatZformat_descriptionr;   propertyr<   r=   r.   r(   rC   r   r   r   r   r   0   s   Mr   c          	   C   s\  g }| j }xttt|dD ]}t|d}t|d}t|d}t|d}g }g }	ttt|d}
t|
dkrq"xR|
D ]J}t|d}|dkrd}nd| }|	| t|d}|||f qW |	  |	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}d}|rt|d}|rd| 	|d d ||d 7 }t|d}|r| 	|d ||d 7 }t
|d}|r||dd}||d 7 }| 	|| d |||	||||ff q"W d}x^|D ]V\}}	}g }x,|	D ]$}t| ||d}|r|| qW ||	||f||< |d7 }qW |S )Nr   r   i  AZRGBARr	   BGr   r    r      r   zlatin-1replace)r    rangeabsr!   r&   listr)   r*   sortr.   r   decoder/   extend)filer,   r    iZy0Zx0Zy1Zx1r+   r%   typestypemr0   r:   ZcombinedlengthrA   r1   tr   r   r   r-      sr    



r-   c             C   sN  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 }|  }	xnt|D ]b}
||
 }|dkr|d7 }|d||	|f x2t|D ]&}|	t|||d   }	|d7 }q W qW | |	 |	d@ rJ|d |S )	Nr   r   r   r   r   z;Ir'   Zpackbits)r    r!   r(   rP   r*   r.   )rV   r%   rA   r6   r1   r    ZcompressionZxsizeZysizeoffsetZchannelr@   rW   Z	bytecountyr   r   r   r/      s@    


r/   z.psdN)__version__rM   r   r   r   Z_binaryr   r   r!   r   r&   r#   r   r   r-   r/   Zregister_openrG   Zregister_extensionr   r   r   r   <module>   s"   wR4