a
    Qh                     @   s   d dl Z d dlZd dlZddlmZmZmZmZmZm	Z	 ddl
mZ ddl
mZ dd Z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 )    N   )ExifTagsImage	ImageFileImageSequenceJpegImagePluginTiffImagePlugin)i16be)o32lec                 C   s   t | || d S N)r   _save)imfpfilename r   K/var/www/sistema_ama/venv/lib/python3.9/site-packages/PIL/MpoImagePlugin.pyr   (   s    r   c              
   C   s  | j dg }|sHz
| j}W n ty2   d}Y n0 |sHt| || d S d}g }t| g|D ]}t|D ]}|sdt	
dd d d |j d	< |j d
}	t|	tjr|	 }	|	|j d
< |	r|dt|	 7 }t||| ||  ql||d || |d   qlq^t }
d|
d< t||
d< d}d}t|D ]P\}}|dkrXd}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_imagesF   s   z>HX   s   MPF sR                                                                                     extraexif   JPEGs   0100i         r   i   z<LLLHH  s   II*    )encoderinfogetis_animatedAttributeErrorr   	itertoolschainr   Iteratorstructpack
isinstancer   Exiftobyteslenr   appendtellsaver   ImageFileDirectory_v2	enumerateseekwriter
   osSEEK_END)r   r   r   r   ZanimatedZ
mpf_offsetoffsets
imSequenceim_framer   ifd	mpentriesZdata_offsetisizemptyper   r   r   	_save_all,   sV    





r<   c                   @   sP   e Zd ZdZdZdZdd ZdddZd	d
 Zdd Z	dd Z
edddZdS )MpoImageFileMPOzMPO (CIPA DC-007)Fc                 C   s$   | j d tj|  |   d S )Nr   )r   r0   r   JpegImageFile_open_after_jpeg_openselfr   r   r   r@   l   s    zMpoImageFile._openNc                    s    j  _|d ur|n   _ jd  _ fdd jd D  _d jd<  jt jksbJ  jd=  jdk _ j	 _
 j
 jd  d _d _d _d S )Nr   c                    s   g | ]}|d   j d  qS )
DataOffsetmpoffset)info).0ZmpentrB   r   r   
<listcomp>u   s   z1MpoImageFile._after_jpeg_open.<locals>.<listcomp>r   r   rE   r   )r:   _initial_size_getmpmpinfon_frames_MpoImageFile__mpoffsetsr*   rF   r    r   _fpr0   _MpoImageFile__frameoffsetreadonly)rC   mpheaderr   rB   r   rA   q   s    

zMpoImageFile._after_jpeg_openc                 C   s   | j | d S r   )rN   r0   )rC   posr   r   r   	load_seek   s    zMpoImageFile.load_seekc                 C   s.  |  |sd S | j| _| j| | _| j| jd  | jd}|sPd}t|| j| _	t
|dkrt
| jdd }t| j|| jd< |   | jd | d d }|dr|  tjj}d	|v rd
|v r|d	 |d
 f| _	nd| jv r| jd= |   dd| j | j| jdffg| _|| _d S )N   zNo data found for framei  r   r   	AttributeMPTypezLarge Thumbnaili  i  jpeg)r   r    )_seek_checkrN   r   rM   rP   r0   read
ValueErrorrI   _sizei16r   
_safe_readrF   _reload_exifrK   
startswithgetexifget_ifdr   IFDr(   r:   modetilerO   )rC   framesegmentmsgnr;   r   r   r   r   r0      s0    

zMpoImageFile.seekc                 C   s   | j S r   )rO   rB   r   r   r   r,      s    zMpoImageFile.tellc                 C   s   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.
        )r=   	__class__rA   )Zjpeg_instancerR   r   r   r   adopt   s    
zMpoImageFile.adopt)N)N)__name__
__module____qualname__formatformat_description!_close_exclusive_fp_after_loadingr@   rA   rT   r0   r,   staticmethodrl   r   r   r   r   r=   g   s   
r=   z.mpoz	image/mpo)r"   r2   r%   rY   r   r   r   r   r   r   _binaryr	   r^   r
   r   r<   r?   r=   register_saverp   register_save_allregister_extensionregister_mimer   r   r   r   <module>   s    ;Y