B
    zb              
   @   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   1lib/python3.7/site-packages/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|| _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i32Z_sizer   rawZpaletteZ	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&   channelsr4   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&   r5   r7   r6   r    
IndexErrorEOFError)r8   layerr>   r&   bboxr5   er   r   r   r2      s    
zPsdImageFile.seekc             C   s   | j S )N)r7   )r8   r   r   r   r)      s    zPsdImageFile.tellN)	__name__
__module____qualname__formatZformat_descriptionZ!_close_exclusive_fp_after_loadingr?   r2   r)   r   r   r   r   r   5   s   Pr   c          	      sN  g } fdd}t |d}|t|d k r4tdxtt|D ]}t|d}t|d}t|d}t|d}	g }
t|d}tt|}t|dkrqDx@|D ]8}t|d}|dkrd}nd	| }|
| |d 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}|rʈ 
 | }t|d}|r~ |d tj t|d}|r |tj t|d}|r||dd} | |||
|||	|ff qDW d}x^|D ]V\}}
}g }x,|
D ]$}t ||d}|r|| qW ||
||f||< |d7 }qW |S )Nc                s   t  | S )N)r   r0   )r4   )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   zlatin-1replacer   )si16absr#   ranger'   r"   listr*   r+   sortr)   r2   r.   SEEK_CURr   decoder3   extend)r    Zct_bytesr-   r!   Zct_Zy0Zx0Zy1Zx1r&   Zct_typestypestypemr>   r4   Zdata_endlengthirC   r5   tr   )r    r   r1      sp    




r1   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)   rS   r+   r2   )filer&   rC   r:   r5   r!   ZcompressionZxsizeZysizeoffsetZchannelrB   r^   Z	bytecountyr   r   r   r3      s>    


r3   z.psdzimage/vnd.adobe.photoshop)r.   rN   r   r   r   Z_binaryr   r   r"   r   r'   r	   rQ   r$   r   r   r1   r3   Zregister_openrH   Zregister_extensionZregister_mimer   r   r   r   <module>   s*   jX3