B
    eAdo              
   @   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   D/var/www/html/venv/lib/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   sN  | j j}|d}t|r&t|ddkr2d}t|t|d}t|d}t|d}t||f \}}||krtd}t||d	kr|dkrd
}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@ sP|d |t|d}
t|
d@ rv|d | j|||
f |dkr|
| jd< qW 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 channelsr   RGBA      r   i   zRGB;Lr   i  Zicc_profile)r   r   )"fpreadr   i16SyntaxErrorMODESOSErrormodei32_sizer   rawpalette	resourcestellr   lenappendinfolayersioBytesIOr   
_safe_read
_layerinfoseekZn_framesZis_animated	_maketilesizetile_fpframeZ
_min_frame)selfr"   smsgZpsd_bitsZpsd_channelsZpsd_moder'   channelsr8   dataendidnameZ_layer_datar   r   r   _open:   sj    



zPsdImageFile._openc          
   C   s|   |  |sd S y8| j|d  \}}}}|| _|| _|| _| j| _||fS  tk
rv } zd}t||W d d }~X Y nX d S )Nr   zno such layer)	Z_seek_checkr1   r'   r9   r;   r:   r!   
IndexErrorEOFError)r<   layerrC   r'   bboxr9   er>   r   r   r   r6      s    
zPsdImageFile.seekc             C   s   | j S )N)r;   )r<   r   r   r   r-      s    zPsdImageFile.tellN)	__name__
__module____qualname__formatformat_descriptionZ!_close_exclusive_fp_after_loadingrD   r6   r-   r   r   r   r   r   5   s   Tr   c          	      sP  g } fdd}t |d}|t|d k r8d}t|xtt|D ]}t|d}t|d}t|d}	t|d}
g }t|d}tt|}t|dkrqHx@|D ]8}t|d}|dkrd}nd	| }|| |d qW |	  |d
gkrd}n2|ddd
gkrd}n|dddd
gkr2d	}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 qHW x^t|D ]R\}\}}}g }x,|D ]$}t ||d}|r|| qW ||||f||< qW |S )Nc                s   t  | S )N)r   r4   )r8   )r!   r   r   r"      s    z_layerinfo.<locals>.readr      z4Layer block too short for number of layers requestedr   i  Ar   Rr   BGr   r       r   zlatin-1replace)si16absr$   ranger(   r#   listr.   r/   sortr-   r6   r2   SEEK_CURr   decode	enumerater7   extend)r!   Zct_bytesr1   r"   ctr>   _Zy0Zx0y1x1r'   Zct_typestypestypemrC   r8   Zdata_endlengthirH   r9   tr   )r!   r   r5      sn    



r5   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-   rY   r/   r6   )filer'   rH   r?   r9   r"   compressionZxsizeZysizeoffsetZchannelrG   rh   Z	bytecountyr   r   r   r7      s>    


r7   z.psdzimage/vnd.adobe.photoshop)r2   rT   r   r   r   _binaryr   r   r#   r   r(   r	   rW   r%   r   r   r5   r7   Zregister_openrM   Zregister_extensionZregister_mimer   r   r   r   <module>   s*   nV2