
    XhB                    P   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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Anycast   )Image	ImageFileImageSequenceJpegImagePluginTiffImagePlugin)o32le)DeferredErrorimImage.Imagefp	IO[bytes]filenamestr | bytesreturnNonec                2    t          j        | ||           d S N)r   _save)r   r   r   s      d/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/PIL/MpoImagePlugin.pyr   r   %   s    "b(+++++    c           
     h   | j                             dg           }|s$t          | dd          st          | ||           d S d}g }| g|}t	          d |D                       }|D ][}t          j        |          D ]B}	|sdd|z  z   }
dt          j        d	d
|
z             z   dz   d|
z  z   |	j         d<   |	j                             d          }t          |t          j                  r|                                }||	j         d<   |r|dt          |          z   z  }t          j        |	||           |                    |                                           |	                    |           }|	                    |d           ||	_         |                    |                                |d         z
             D]t'          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   c              3  8   K   | ]}t          |d d          V  dS )n_framesr   N)getattr).0seqs     r   	<genexpr>z_save_all.<locals>.<genexpr>2   s.      DDZ++DDDDDDr   B      s   z>H   s   MPF     extraexif   JPEGs   0100i     r   r   i   z<LLLHH  s   II*    )encoderinfogetr"   r   sumr
   Iteratorstructpack
isinstancer   Exiftobyteslenr   appendtell_attach_default_encoderinfosaver   ImageFileDirectory_v2	enumerateseekwriter   osSEEK_END)r   r   r   r   
mpf_offsetoffsetsim_sequencestotalim_sequenceim_frame
ifd_lengthr+   r2   ifd	mpentriesdata_offsetisizemptypes                      r   	_save_allrS   )   s   N&&;;M ]E!B!B b"hJG''LDD|DDDDDE# 8 8%.{;; 	8 	8H 8"u*_
k$J778 Z'( $W-  +//77dEJ// 8<<>>D37H(0 0!c$ii-/J%hH===rwwyy))))&BB2FFb&)))'2$rwwyy72;67777/	82 
/
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                  `    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)Fr   r   c                    | j                             d           t          j                            |            |                                  d S )Nr   )r   rB   r   JpegImageFile_open_after_jpeg_openselfs    r   rY   zMpoImageFile._openl   sB    Q%++D111r   Nmpheaderdict[int, Any] | Nonec                    ||n                                   _         j        d}t          |           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 )Nz(Image appears to be a malformed MPO filer/   c                <    g | ]}|d          j         d         z   S )
DataOffsetmpoffset)info)r#   mpentr\   s     r   
<listcomp>z1MpoImageFile._after_jpeg_open.<locals>.<listcomp>w   s7     
 
 
<AE,$)J"77
 
 
r   r0   r   rb   r   )_getmpmpinfo
ValueErrorr!   _MpoImageFile__mpoffsetsr;   rc   r   r   _fprB   _MpoImageFile__frameoffsetreadonly)r\   r]   msgs   `  r   rZ   zMpoImageFile._after_jpeg_openq   s    "*"6hhDKKMM;<CS//!F+
 
 
 
EI[QWEX
 
 
   }D$4 5 55555Ij!=1,7d&q)***r   posintc                    t          | j        t                    r| j        j        | j                            |           d S r   )r8   rj   r   exrB   )r\   ro   s     r   	load_seekzMpoImageFile.load_seek   s:    dh.. 	(+cr   framec                   |                      |          sd S t          | j        t                    r| j        j        | 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|                                  t#          j        dd| j        z   | j        | j        d         d                   g| _        || _        d S )Nr+      zNo data found for framejpeg)r   r   r   r.   )_seek_checkr8   rj   r   rr   r   ri   rl   rc   r3   rB   readrh   r   rX   rY   _reload_exifr	   _TilerQ   tilerk   )r\   rt   original_exifrn   s       r   rB   zMpoImageFile.seek   sT   && 	Fdh.. 	(+(&u-	f--TY	&!T[1_%%%w||A 	"+CS//!T[!!!%++D1119==  M11 OFFTY$6TYq\RTEUVV
	 r   c                    | j         S r   )rk   r[   s    r   r=   zMpoImageFile.tell   s
    |r   jpeg_instanceJpegImagePlugin.JpegImageFilec                r    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.
        )rU   	__class__r   rZ   )r   r]   mpo_instances      r   adoptzMpoImageFile.adopt   s5     #/L-88%%h///r   )r   r   r   )r]   r^   r   r   )ro   rp   r   r   )rt   rp   r   r   )r   rp   )r   r   r]   r^   r   rU   )__name__
__module____qualname__formatformat_description!_close_exclusive_fp_after_loadingrY   rZ   rs   rB   r=   staticmethodr    r   r   rU   rU   g   s        F,(-%       
    ,   
   4     +/    \  r   rU   z.mpoz	image/mpo)r   r   r   r   r   r   r   r   )
__future__r   rD   r6   typingr   r   r    r   r	   r
   r   r   _binaryr   _utilr   r   rS   rX   rU   register_saver   register_save_allregister_extensionregister_mimer   r   r   <module>r      s|  ( # " " " " " 				                                                    , , , ,7 7 7 7|T T T T T?0 T T T|  L' / / /  +Y 7 7 7  ,f 5 5 5  L' 5 5 5 5 5r   