a
    ç´«jB  ã                   @  sÚ   d dl mZ d dlZd dlZd dlmZmZmZ ddlm	Z	m
Z
mZmZmZ ddlmZ ddlmZ dd	d
ddœdd„Zdd	d
ddœdd„ZG dd„ dejƒZe	 eje¡ e	 eje¡ e	 ejd¡ e	 ejd¡ dS )é    )ÚannotationsN)ÚIOÚAnyÚcasté   )ÚImageÚ	ImageFileÚImageSequenceÚJpegImagePluginÚTiffImagePlugin)Úo32le)ÚDeferredErrorzImage.Imagez	IO[bytes]zstr | bytesÚNone)ÚimÚfpÚfilenameÚreturnc                 C  s   t  | ||¡ d S ©N)r
   Ú_save)r   r   r   © r   úQ/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/PIL/MpoImagePlugin.pyr   %   s    r   c              
   C  sî  | j  dg ¡}|s.t| ddƒs.t| ||ƒ d S d}g }| g|¢}tdd„ |D ƒƒ}|D ]Ø}t |¡D ]È}	|súdd|  }
d	t d
d|
 ¡ d d|
  |	j d< |	j  d¡}t	|t
jƒrÈ| ¡ }||	j d< |rÜ|dt|ƒ 7 }t |	||¡ | | ¡ ¡ qd|	 | ¡}|	 |d¡ ||	_ | | ¡ |d  ¡ qdqVt ¡ }d|d< t|ƒ|d< d}d}t|ƒD ]P\}}|dk�rtd}nd}|t d|||dd¡7 }|dk�r¢||8 }||7 }�q\||d< | |¡ | dtdƒ | d¡ ¡ | dtj¡ d S )NÚappend_imagesÚis_animatedFé   c                 s  s   | ]}t |d dƒV  qdS )Ún_framesr   N)Úgetattr)Ú.0Úseqr   r   r   Ú	<genexpr>2   ó    z_save_all.<locals>.<genexpr>éB   é   s   ÿâz>Hé   s   MPF ó    ÚextraÚexifé   ZJPEGéÿÿÿÿs   0100i °  é°  r   r   i   z<LLLHHé°  s   II* é   )ÚencoderinfoÚgetr   r   Úsumr	   ÚIteratorÚstructÚpackÚ
isinstancer   ZExifÚtobytesÚlenr
   ÚappendÚtellZ_attach_default_encoderinfoÚsaver   ZImageFileDirectory_v2Ú	enumerateÚseekÚwriter   ÚosÚSEEK_END)r   r   r   r   Z
mpf_offsetÚoffsetsZim_sequencesÚtotalZim_sequenceZim_frameZ
ifd_lengthr%   r+   ZifdZ	mpentriesZdata_offsetÚiÚsizeZmptyper   r   r   Ú	_save_all)   sb    
ÿþýÿ




r@   c                   @  s~   e Zd ZdZdZdZddœdd„Zdd	dd
œdd„Zdddœdd„Zdddœdd„Z	ddœdd„Z
eddd	d dœdd„ƒZdS )ÚMpoImageFileZMPOzMPO (CIPA DC-007)Fr   )r   c                 C  s$   | j  d¡ tj | ¡ |  ¡  d S )Nr   )r   r8   r
   ÚJpegImageFileÚ_openÚ_after_jpeg_open©Úselfr   r   r   rC   l   s    zMpoImageFile._openNzdict[int, Any] | None)Úmpheaderr   c                   s´   |d ur|nˆ   ¡ ˆ _ˆ jd u r,d}t|ƒ‚ˆ jd ˆ _‡ fdd„ˆ jd D ƒˆ _dˆ jd< ˆ jtˆ jƒkspJ ‚ˆ jd= ˆ jdkˆ _ˆ jˆ _	ˆ j	 
ˆ jd ¡ dˆ _dˆ _dˆ _d S )	Nz(Image appears to be a malformed MPO filer(   c                   s   g | ]}|d  ˆ j d  ‘qS )Z
DataOffsetÚmpoffset)Úinfo)r   ZmpentrE   r   r   Ú
<listcomp>w   s   z1MpoImageFile._after_jpeg_open.<locals>.<listcomp>r)   r   rH   r   )Z_getmpZmpinfoÚ
ValueErrorr   Ú_MpoImageFile__mpoffsetsr3   rI   r   r   Ú_fpr8   Ú_MpoImageFile__frameÚoffsetÚreadonly)rF   rG   Úmsgr   rE   r   rD   q   s"    

ÿ
zMpoImageFile._after_jpeg_openÚint)Úposr   c                 C  s$   t | jtƒr| jj‚| j |¡ d S r   )r1   rM   r   Úexr8   )rF   rS   r   r   r   Ú	load_seek‡   s    zMpoImageFile.load_seek)Úframer   c                 C  sà   |   |¡sd S t| jtƒr"| jj‚| j| _| j| | _| j 	d¡}d| jv rT| jd= | j 
| jd ¡ | j d¡s~d}t|ƒ‚| j 
| j¡ tj | ¡ | j 	d¡|kr°|  ¡  t dd| j | j| jd d ¡g| _|| _d S )Nr%   é   zNo data found for frameZjpeg)r   r   r   r'   )Z_seek_checkr1   rM   r   rT   r   rL   rO   rI   r,   r8   ÚreadrK   r
   rB   rC   Z_reload_exifr   Z_Tiler?   ZtilerN   )rF   rV   Zoriginal_exifrQ   r   r   r   r8   Œ   s(    

 ÿzMpoImageFile.seekc                 C  s   | j S r   )rN   rE   r   r   r   r5   ¦   s    zMpoImageFile.tellzJpegImagePlugin.JpegImageFile)Újpeg_instancerG   r   c                 C  s   t | _tt | ƒ}| |¡ |S )aC  
        Transform the instance of JpegImageFile into
        an instance of MpoImageFile.
        After the call, the JpegImageFile is extended
        to be an MpoImageFile.

        This is essentially useful when opening a JPEG
        file that reveals itself as an MPO, to avoid
        double call to _open.
        )rA   Ú	__class__r   rD   )rY   rG   Zmpo_instancer   r   r   Úadopt©   s    

zMpoImageFile.adopt)N)N)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionZ!_close_exclusive_fp_after_loadingrC   rD   rU   r8   r5   Ústaticmethodr[   r   r   r   r   rA   g   s    þrA   z.mpoz	image/mpo)Ú
__future__r   r:   r/   Útypingr   r   r   Ú r   r   r	   r
   r   Ú_binaryr   Z_utilr   r   r@   rB   rA   Zregister_saver_   Zregister_save_allZregister_extensionZregister_mimer   r   r   r   Ú<module>   s   >^