
     f                    @   d dl mZ d dlZd dlZd dlZd dlmZ ddlmZm	Z	m
Z
mZ ddlmZ ddZddZ G d de
j                  Z ej        ej        e            ej        ej        e            ej        ej        d            ej        ej        d           dS )    )annotationsN)IO   )ImageImageSequenceJpegImagePluginTiffImagePlugin)o32leimImage.Imagefp	IO[bytes]filenamestr | bytesreturnNonec                2    t          j        | ||           d S N)r   _save)r   r   r   s      U/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/PIL/MpoImagePlugin.pyr   r   $   s    "b(+++++    c           
         | j                             dg           }|s$t          | dd          st          | ||           d S d}g }t	          j        | g|          D ]1}t          j        |          D ]}|sdt          j	        dd          z   dz   d	z   |j         d
<   |j                             d          }t          |t          j                  r|                                }||j         d<   |r|dt          |          z   z  }t          j        |||           |                    |                                           |                    |d           |                    |                                |d         z
             3t'          j                    }	d|	d<   t          |          |	d<   d}
d}t+          |          D ]<\  }}|dk    rd}nd}|
t          j	        d|||dd          z  }
|dk    r||z  }||z  }=|
|	d<   |                    |           |                    dt1          d          z   |	                    d          z              |                    dt2          j                   d S )Nappend_imagesis_animatedF   s   z>HX   s   MPF sR                                                                                     extraexif   JPEGs   0100i     r   r   i   z<LLLHH  s   II*    )encoderinfogetgetattrr   	itertoolschainr   Iteratorstructpack
isinstancer   Exiftobyteslenr   appendtellsaver	   ImageFileDirectory_v2	enumerateseekwriter
   osSEEK_END)r   r   r   r   
mpf_offsetoffsets
imSequenceim_framer   ifd	mpentriesdata_offsetisizemptypes                  r   	_save_allrD   (   s   N&&;;M ]E!B!B b"hJGordM:: 8 8
%.z:: 	8 	8H 8  &+dF";";;hFR $W-  +//77dEJ// 8<<>>D37H(0 0!c$ii-/J%hH===rwwyy))))b&)))rwwyy72;67777#	8& 
/
1
1CCKg,,CKIKW%%  466FFFV[64aKKK	66:%KtCKGGJHH]U1XX%A6777GGAr{r   c                  Z    e Zd ZdZdZdZddZddZddZddZ	ddZ
edd            ZdS )MpoImageFileMPOzMPO (CIPA DC-007)Fr   r   c                    | j                             d           t          j                            |            |                                  d S )Nr   )r   r6   r   JpegImageFile_open_after_jpeg_openselfs    r   rJ   zMpoImageFile._openc   sB    Q%++D111r   Nc                    ||n                                   _         j        d          _         fd j        d         D              _        d j        d<    j        t	           j                  k    sJ  j        d=  j        dk     _         j         _         j        	                     j        d                    d _
        d _        d _        d S )Nr"   c                <    g | ]}|d          j         d         z   S )
DataOffsetmpoffset)info).0mpentrM   s     r   
<listcomp>z1MpoImageFile._after_jpeg_open.<locals>.<listcomp>k   s7     
 
 
<AE,$)J"77
 
 
r   r#   r   rQ   r   )_getmpmpinfon_frames_MpoImageFile__mpoffsetsr0   rR   r   r   _fpr6   _MpoImageFile__frameoffsetreadonly)rM   mpheaders   ` r   rK   zMpoImageFile._after_jpeg_openh   s    "*"6hhDKKMMF+
 
 
 
EI[QWEX
 
 
   }D$4 5 55555Ij!=1,7d&q)***r   posintc                :    | j                             |           d S r   )rZ   r6   )rM   r_   s     r   	load_seekzMpoImageFile.load_seek{   s    cr   framec                   |                      |          sd S | j        | _        | j        |         | _        | j                            d          }d| j        v r| j        d= | j                            | j        dz              | j                            d          sd}t          |          | j                            | j                   t          j                            |            | j                            d          |k    r|                                  dd| j        z   | j        | j        d         d         fg| _        || _        d S )Nr      zNo data found for framejpeg)r   r   r   r!   )_seek_checkrZ   r   rY   r\   rR   r&   r6   read
ValueErrorr   rI   rJ   _reload_exifrB   tiler[   )rM   rc   original_exifmsgs       r   r6   zMpoImageFile.seek~   s(   && 	F(&u-	f--TY	&!T[1_%%%w||A 	"+CS//!T[!!!%++D1119==  M11fty0$+ty|B?OPQ	r   c                    | j         S r   )r[   rL   s    r   r2   zMpoImageFile.tell   s
    |r   c                H    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.
        )rF   	__class__rK   )jpeg_instancer^   s     r   adoptzMpoImageFile.adopt   s&     #/&&x000r   )r   r   r   )r_   r`   r   r   )rc   r`   r   r   )r   r`   )__name__
__module____qualname__formatformat_description!_close_exclusive_fp_after_loadingrJ   rK   rb   r6   r2   staticmethodrr    r   r   rF   rF   ^   s        F,(-%       
   &      ,       \  r   rF   z.mpoz	image/mpo)r   r   r   r   r   r   r   r   )
__future__r   r(   r8   r+   typingr    r   r   r   r	   _binaryr
   r   rD   rI   rF   register_saverv   register_save_allregister_extensionregister_mimerz   r   r   <module>r      s`  ( # " " " " "     				                        , , , ,/ / / /lG G G G G?0 G G Gb  L' / / /  +Y 7 7 7  ,f 5 5 5  L' 5 5 5 5 5r   