a
    ¥Q•h‘  ã                   @   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 ]¤}|sîd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>HéX   s   MPF sR                                                                                     ÚextraÚexifé   ÚJPEGéÿÿÿÿs   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rêt
| j d¡ƒd }t | j|¡| jd< |  ¡  | jd | d d }| d¡rè|  ¡  tjj¡}d	|v rèd
|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