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é   )Ú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 )Ú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ƒ‚|| _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  Ú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Ú_PsdImageFile__fpÚframeÚ
_min_frame)Úselfr$   ÚsÚpsd_bitsÚpsd_channelsÚpsd_moder)   Úchannelsr<   ÚdataÚendÚidÚnameÚ_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)	Ú_seek_checkr3   r)   r=   r?   r>   r#   Ú
IndexErrorÚEOFError)rA   ÚlayerrJ   r)   Úbboxr=   Úer   r   r   r8   ‹   s   


€ÿzPsdImageFile.seekc                 C   s   | j S ©N)r?   ©rA   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   )Úimr)   r<   r   ÚcoreÚfillÚloadrT   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 rS   )r>   r#   ÚcloseÚAttributeErrorrT   r   r   r   Ú
_close__fp¦   s   
€ÿ€
þzPsdImageFile._close__fpN)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionÚ!_close_exclusive_fp_after_loadingrL   r8   r/   rY   r\   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 rS   )r   r6   )r<   ©r#   r   r   r$   ´   s   z_layerinfo.<locals>.readr   é   z4Layer block too short for number of layers requestedr   iÿÿ  ÚAÚRGBAÚRr   )ÚBÚGrg   r   )re   rh   ri   rg   r   Ú r   é   r   zlatin-1Úreplace)Úsi16Úabsr&   Úranger*   r%   Úlistr0   r1   Úsortr/   r8   r4   ÚSEEK_CURr   Údecoder;   Úextend)r#   Úct_bytesr3   r$   ÚctÚiÚy0Úx0Úy1Úx1r2   r)   Úct_typesÚtypesÚtypeÚmr<   rJ   ÚcombinedÚdata_endÚlengthrQ   r=   Útr   rc   r   r7   °   s~   



€r7   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,   Úpackbits)r$   r%   r/   ro   r1   r8   )Úfiler)   rQ   rF   r=   r$   ÚcompressionÚxsizeÚysizeÚoffsetÚchannelrP   rw   Ú	bytecountÚyr   r   r   r;     sB   û
þ
r;   z.psdzimage/vnd.adobe.photoshop)r4   rj   r   r   r   Ú_binaryr   r   r%   r   r*   r	   rm   r'   r   r   r7   r;   Úregister_openr`   Úregister_extensionÚregister_mimer   r   r   r   Ú<module>   s.   ö{^3