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}|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  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rd}n|g dkrd}n|g dkrd	}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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%   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