o
    _#ûaˆ  ã                
   @   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   ú4/usr/lib/python3/dist-packages/PIL/PsdImagePlugin.pyÚ_accept-   s   r   c                   @   s@   e Zd ZdZdZdZdd„ Zd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r6tdƒ‚|| _t|d	ƒt|d
ƒf| _	t|dƒƒ}|r_||ƒ}	|dkr_|dkr_t
 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 sxg | _t|dƒƒ}|rï| j  ¡ | }
t|dƒƒ}|rét 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Úi32Ú_sizer   ÚrawZpaletteZ	resourcesÚtellr   ÚlenÚappendÚinfoÚlayersÚioÚBytesIOr   Ú
_safe_readÚ
_layerinfoÚseekZn_framesZis_animatedÚ	_maketileÚsizeÚtileÚ_PsdImageFile__fpÚframeZ
_min_frame)Úselfr!   ÚsZpsd_bitsZpsd_channelsZpsd_moder&   Úchannelsr5   ÚdataÚendÚidÚnameZ_layer_datar   r   r   Ú_open;   sb   



õ
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)	Z_seek_checkr.   r&   r6   r8   r7   r    Ú
IndexErrorÚEOFError)r9   Úlayerr?   r&   Úbboxr6   Úer   r   r   r3   ‹   s   


€ÿzPsdImageFile.seekc                 C   s   | j S ©N)r8   ©r9   r   r   r   r*   š   s   zPsdImageFile.tellc                 C   sV   | j r| j j| jks| j j| jkrtj | j| jd¡| _ | jdkr)tj | ¡ d S d S )Nr   r   )Zimr&   r5   r   ZcoreÚfillÚloadrG   r   r   r   Úload_preparež   s
   "
ÿzPsdImageFile.load_preparec                 C   sP   z#z| j | jkr| j  ¡  W n	 ty   Y nw W d | _ d S W d | _ d S d | _ w rF   )r7   r    ÚcloseÚAttributeErrorrG   r   r   r   Ú
_close__fp¦   s   
€ÿ€
þzPsdImageFile._close__fpN)Ú__name__Ú
__module__Ú__qualname__ÚformatZformat_descriptionZ!_close_exclusive_fp_after_loadingr@   r3   r*   rJ   rM   r   r   r   r   r   5   s    Pr   c              	      sf  g }‡ fdd„}t |dƒƒ}|t|ƒd k rtdƒ‚tt|ƒƒD ]â}t|dƒƒ}t|dƒƒ}t|dƒƒ}t|dƒƒ}	g }
g }t|dƒƒ}tt|ƒƒ}t|ƒdkrQq |D ]%}t|dƒƒ}|dkrbd}nd	| }| |¡ t|dƒƒ}|
 ||f¡ qS| 	¡  |d
gkr…d}n|g d¢krŽd}n|g d¢kr—d	}nd }|dƒ d}t|dƒƒ}d}|röˆ  
¡ | }t|dƒƒ}|rÀˆ  |d tj¡ ||d 7 }t|dƒƒ}|rÕˆ  |tj¡ ||d 7 }t|dƒƒ}|rë||ƒ dd¡}||d 7 }ˆ  |¡ | |||||	|ff¡ q d}|D ])\}}}g }|D ]}tˆ ||dƒ}|r!| |¡ q||||f||< |d7 }q|S )Nc                    s   t  ˆ | ¡S rF   )r   r1   )r5   ©r    r   r   r!   ´   s   z_layerinfo.<locals>.readr   é   z4Layer block too short for number of layers requestedr   iÿÿ  ÚAZRGBAÚRr   )ÚBÚGrU   r   )rT   rV   rW   rU   r   Ú r   é   r   zlatin-1Úreplace)Úsi16Úabsr#   Úranger'   r"   Úlistr+   r,   Úsortr*   r3   r/   ÚSEEK_CURr   Údecoder4   Úextend)r    Zct_bytesr.   r!   ZctÚiZy0Zx0Zy1Zx1r-   r&   Zct_typesÚtypesÚtypeÚmr5   r?   ZcombinedZdata_endÚlengthrD   r6   Útr   rR   r   r2   °   s~   



€r2   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rŠd}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)   Zpackbits)r!   r"   r*   r]   r,   r3   )Úfiler&   rD   r;   r6   r!   ÚcompressionZxsizeZysizeÚoffsetZchannelrC   rc   Z	bytecountÚyr   r   r   r4     sB   û
þ
r4   z.psdzimage/vnd.adobe.photoshop)r/   rX   r   r   r   Z_binaryr   r   r"   r   r'   r	   r[   r$   r   r   r2   r4   Zregister_openrQ   Zregister_extensionZregister_mimer   r   r   r   Ú<module>   s.   ö{^3