o
    1ήc(                  
   @   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   )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   9/tmp/pip-target-vg8gfxp4/lib/python/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 )PsdImageFile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r6td|d	krB|dkrBd
}d}|| _t|dt|df| _	t|d}|rk||}	|dkrk|dkrkt
d|	| _g | _t|d}|r| j  | }
| 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< | j  |
k sg | _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  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seekn_framesis_animated	_maketilesizetile_fpframe
_min_frame)selfr%   spsd_bitspsd_channelspsd_moder*   channelsr=   dataendidname_layer_datar   r   r   _open;   sh   




zPsdImageFile._openc              
   C   sl   |  |sd S z| j|d  \}}}}|| _|| _|| _| j| _||fW S  ty5 } ztd|d }~ww )Nr   zno such layer)	_seek_checkr4   r*   r>   r@   r?   r$   
IndexErrorEOFError)rB   layerrK   r*   bboxr>   er   r   r   r9      s   


zPsdImageFile.seekc                 C   s   | j S N)r@   )rB   r   r   r   r0      s   zPsdImageFile.tellN)	__name__
__module____qualname__formatformat_description!_close_exclusive_fp_after_loadingrM   r9   r0   r   r   r   r   r   5   s    Sr   c              	      s$  g } fdd}t |d}|t|d k rtdtt|D ]}t|d}t|d}t|d}t|d}	g }
t|d}tt|}t|dkrOq |D ]}t|d}|dkr`d}nd	| }|
| |d qQ|
	  |
d
gkrzd}
n|
g dkrd}
n|
g dkrd	}
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 q d}|D ]'\}}
}g }|
D ]}t ||d}|r|| q||
||f||< |d7 }q|S )Nc                    s   t  | S rT   )r   r7   )r=   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]   r_   r`   r^   r       r   zlatin-1replacer   )si16absr'   ranger+   r&   listr1   r2   sortr0   r9   r5   SEEK_CURr   decoder<   extend)r$   ct_bytesr4   r%   ct_y0x0y1x1r*   ct_typestypestypemrK   r=   data_endlengthirR   r>   tr   r[   r   r8      sr   





r8   c                 C   s2  d }| j }t|d}|d |d  }|d |d  }|  }	|dkrHg }t|D ]}
||
 }|dkr7|d7 }|d||	|f |	||  }	q)nB|dkrd}g }||| d }|  }	t|D ])}
||
 }|dkrn|d7 }|d||	|f t|D ]}|	t|| }	|d7 }q{q`| |	 |	d@ r|d |S )	Nr   r   r   r   r   z;Ir-   packbits)r%   r&   r0   rf   r2   r9   )filer*   rR   rG   r>   r%   compressionxsizeysizeoffsetchannelrQ   ry   	bytecountyr   r   r   r<      sB   

r<   z.psdzimage/vnd.adobe.photoshop)r5   ra   r   r   r   _binaryr   r   r&   r   r+   r	   rd   r(   r   r   r8   r<   register_openrX   register_extensionregister_mimer   r   r   r   <module>   s.   mX3