o
    ë6WjÎ"  ã                
   @  s   d dl mZ d dlZd dlmZ d dlm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lmZ ddlmZ ddddddddddœ	Zd.dd„ZG dd„ de	j	ƒZd/d!d"„Zd0d*d+„Ze ejee¡ e ejd,¡ e ejd-¡ dS )1é    )ÚannotationsN)Úcached_property)ÚIOé   )ÚImageÚ	ImageFileÚImagePalette)Úi8)Úi16be)Úi32be)Úsi16be)Úsi32be)ÚDeferredError)Ú1r   )ÚLr   )ÚPr   )ÚRGBé   )ÚCMYKé   )ÚLABr   )	)r   r   )r   é   )r   r   )é   r   )r   r   )r   r   )é   r   )r   r   )é	   r   ÚprefixÚbytesÚreturnÚboolc                 C  s
   |   d¡S )Ns   8BPS)Ú
startswith)r   © r    úa/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/PIL/PsdImagePlugin.pyÚ_accept2   s   
r"   c                   @  s`   e Zd ZdZdZdZddd„Zedd	d
„ƒZe	ddd„ƒZ
e	ddd„ƒZddd„Zddd„ZdS )ÚPsdImageFileÚPSDzAdobe PhotoshopFr   ÚNonec                 C  s4  | j d usJ ‚| j j}|dƒ}t|ƒrt|dƒdkr d}t|ƒ‚t|dƒ}t|dƒ}t|dƒ}t||f \}}||krAd}t|ƒ‚|d	krM|dkrMd
}d}|| _t|dƒt|dƒf| _	t|dƒƒ}	|	rv||	ƒ}
|dkrv|	dkrvt
 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 s�d | _t|dƒƒ}	|	rÿ| j  ¡ |	 }t|dƒƒ}	|	rù| j  ¡ | _|	| _| j  |¡ d | _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_positionÚ_layers_sizeÚseekÚ	_n_framesÚ	_maketileÚsizeÚtileÚ_fpÚframeÚ
_min_frame)Úselfr/   ÚsÚmsgÚpsd_bitsÚpsd_channelsÚpsd_modeÚmodeÚchannelsrC   ÚdataÚendÚidÚnamer    r    r!   Ú_open?   sl   



õ
zPsdImageFile._openúGlist[tuple[str, str, tuple[int, int, int, int], list[ImageFile._Tile]]]c                 C  s`   g }| j d ur)t| jtƒr| jj‚| j | j ¡ t t 	| j| j
¡¡}t|| j
ƒ}t|ƒ| _|S ©N)r>   Ú
isinstancerE   r   Úexr@   ÚioÚBytesIOr   Ú
_safe_readr?   Ú
_layerinfor;   rA   )rH   ÚlayersÚ_layer_datar    r    r!   r]   “   s   

zPsdImageFile.layersÚintc                 C  s   | j d u rt| jƒ| _ | j S rV   )rA   r;   r]   ©rH   r    r    r!   Ún_frames¡   s   
zPsdImageFile.n_framesr   c                 C  s   t | jƒdkS )Nr   )r;   r]   r`   r    r    r!   Úis_animated§   s   zPsdImageFile.is_animatedÚlayerc                 C  sp   |   |¡sd S t| jtƒr| jj‚|t| jƒkrd}t|ƒ‚| j|d  \}}}}|| _|| _	|| _
| j| _d S )Nzno more images in PSD filer   )Ú_seek_checkrW   rE   r   rX   r;   r]   ÚEOFErrorr4   rD   rF   r.   )rH   rc   rJ   Ú_rN   rD   r    r    r!   r@   «   s   
zPsdImageFile.seekc                 C  s   | j S rV   )rF   r`   r    r    r!   r:   »   s   zPsdImageFile.tellN)r   r%   )r   rU   )r   r_   )r   r   )rc   r_   r   r%   )Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionÚ!_close_exclusive_fp_after_loadingrT   r   r]   Úpropertyra   rb   r@   r:   r    r    r    r!   r#   :   s    
T
r#   r.   ú	IO[bytes]Úct_bytesr_   rU   c              	     sb  g }d‡ fdd„}t |dƒƒ}|t|ƒd k rd	}t|ƒ‚tt|ƒƒD ]Ü}t|d
ƒƒ}t|d
ƒƒ}t|d
ƒƒ}	t|d
ƒƒ}
g }t|dƒƒ}|d
krbˆ  |d d tj¡ t	|d
ƒƒ}ˆ  |tj¡ q#t|ƒD ]#}t|dƒƒ}|dkrud}n|d
k r~d| }nd}| 
|¡ |d
ƒ qf| ¡  |dgkr–d}n|g d¢krŸd}n|g d¢kr¨d}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#g }t|ƒD ](\}\}}}g }|D ]}tˆ ||dƒ}|�r"| |¡ �q| 
||||f¡ �q|S )NrC   r_   r   r   c                   s   t  ˆ | ¡S rV   )r   r[   )rC   ©r.   r    r!   r/   Æ   s   z_layerinfo.<locals>.readr   é   z4Layer block too short for number of layers requestedr   é   r(   iÿÿ  ÚAr*   Ú ÚRr   )ÚBÚGru   r   )rs   rv   rw   ru   é   r   zlatin-1Úreplace)rC   r_   r   r   )Úsi16Úabsr1   ÚrangeÚsi32r0   r@   rY   ÚSEEK_CURr5   r<   Úsortr:   r	   ÚdecodeÚ	enumeraterB   Úextend)r.   ro   r]   r/   ÚctrJ   rf   Úy0Úx0Úy1Úx1ÚbandsÚct_typesrC   Ú
channel_idÚbrN   rS   Údata_endÚlengthÚ	layerinfoÚiÚbboxrD   ÚmÚtr    rp   r!   r\   À   sz   





€r\   ÚfilerN   Ústrr�   útuple[int, int, int, int]rO   úlist[ImageFile._Tile]c              	   C  s2  g }| j }t|dƒƒ}|d |d  }|d |d  }|  ¡ }	|dkrHt|ƒD ]}
||
 }|dkr5|d7 }| t d||	|¡¡ |	||  }	q'nB|dkrŠd}||| d ƒ}|  ¡ }	t|ƒD ]+}
||
 }|dkrl|d7 }| t d||	|¡¡ t|ƒD ]}|	t||ƒ }	|d7 }q{q^|  |	¡ |	d@ r—|dƒ |S )	Nr   r   r   r   r   z;Ir7   Úpackbits)r/   r0   r:   r|   r<   r   Ú_Tiler@   )r“   rN   r�   rO   Útilesr/   ÚcompressionÚxsizeÚysizeÚoffsetÚchannelrc   r�   Ú	bytecountÚyr    r    r!   rB     s>   û
þ
rB   z.psdzimage/vnd.adobe.photoshop)r   r   r   r   )r.   rn   ro   r_   r   rU   )
r“   rn   rN   r”   r�   r•   rO   r_   r   r–   ) Ú
__future__r   rY   Ú	functoolsr   Útypingr   rt   r   r   r   Ú_binaryr	   r
   r0   r   r5   r   rz   r   r}   Ú_utilr   r2   r"   r#   r\   rB   Úregister_openrj   Úregister_extensionÚregister_mimer    r    r    r!   Ú<module>   s:   ö
 

]2