o
    sh!                  
   @  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    f/var/www/html/construction_image-detection-poc/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  s&  | j j}|d}t|rt|ddkrd}t|t|d}t|d}t|d}t||f \}}||kr:d}t||d	krF|dkrFd
}d}|| _t|dt|df| _	t|d}	|	ro||	}
|dkro|	dkrot
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 sd | _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?   sj   




zPsdImageFile._openGlist[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  sV   |  |sd S t| jtr| jj| j|d  \}}}}|| _|| _|| _| j| _	d S rb   )
_seek_checkrW   rE   r   rX   r]   r4   rD   rF   r.   )rH   rd   _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   )rd   r_   r   r%   )__name__
__module____qualname__formatformat_description!_close_exclusive_fp_after_loadingrT   r   r]   propertyra   rc   r@   r:   r    r    r    r!   r#   :   s    
S
r#   r.   	IO[bytes]ct_bytesr_   rU   c              	     sR  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| }|
| |d
 qf|  |dgkrd}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#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Grt   r   )rs   ru   rv   rt       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   typebrN   rS   data_endlength	layerinfoibboxrD   mtr    rp   r!   r\      sv   




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rd}||| 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channelrd   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   rw   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