
    g                    z   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       y)    )annotationsN)IO   )ImageImageSequenceJpegImagePluginTiffImagePlugin)o32lec                2    t        j                  | ||       y N)r   _save)imfpfilenames      G/var/www/openai/venv/lib/python3.12/site-packages/PIL/MpoImagePlugin.pyr   r   $   s    "b(+    c           
        | j                   j                  dg       }|st        | dd      st        | ||       y d}g }t	        j
                  | g|      D ]"  }t        j                  |      D ]  }|sdt        j                  dd      z   dz   d	z   |j                   d
<   |j                   j                  d      }t        |t        j                        r|j                         }||j                   d<   |r|dt        |      z   z  }t        j                  |||       |j!                  |j#                                |j%                  |d       |j!                  |j#                         |d   z
         	 % 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<   |j-                  |       |j/                  dt1        d      z   |	j                  d      z          |j-                  dt2        j4                         y )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_allr?   (   s   NN&&;M]E!Bb"hJGoordM:
%..z:H  &++dF";;hFR $$W-  ++//7dEJJ/<<>D37H((0!c$i-/J%%hH=rwwy)b&)rwwy72;67# ; ;( 
/
/
1CCKg,CKIKW%46FFV[[64aKK	6:%Kt & CKGGJHH]U1X%A67GGAr{{r   c                  R    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y)MpoImageFileMPOzMPO (CIPA DC-007)Fc                    | j                   j                  d       t        j                  j	                  |        | j                          y )Nr   )r   r1   r   JpegImageFile_open_after_jpeg_openselfs    r   rE   zMpoImageFile._openc   s1    Q%%++D1r   Nc                   ||n| j                         | _        | j                  d   | _        | j                  d   D cg c]  }|d   | j                  d   z    c}| _        d| j                  d<   | j                  t        | j                        k(  sJ | j                  d= | j                  dkD  | _        | j                  | _        | j                  j                  | j                  d          d| _
        d| _        d| _        y c c}w )Nr   r   
DataOffsetmpoffsetr   r   )_getmpmpinfon_framesinfo_MpoImageFile__mpoffsetsr+   r   r   _fpr1   _MpoImageFile__frameoffsetreadonly)rH   mpheadermpents      r   rF   zMpoImageFile._after_jpeg_openh   s    "*"6hDKKMF+EI[[QWEX
EXEE,$))J"77EX
   }}D$4$4 5555IIj!==1,77d&&q)*
s   Dc                :    | j                   j                  |       y r   )rQ   r1   )rH   poss     r   	load_seekzMpoImageFile.load_seek{   s    cr   c                   | j                  |      sy | j                  | _        | j                  |   | _        | j
                  j                  d      }d| j
                  v r| j
                  d= | j                  j                  | j                  dz          | j                  j                  d      sd}t        |      | j                  j                  | j                         t        j                  j                  |        | j
                  j                  d      |k7  r| j                          dd| j                  z   | j                  | j                  d   d   fg| _        || _        y )Nr      zNo data found for framejpeg)r   r   r   r   )_seek_checkrQ   r   rP   rS   rO   r!   r1   read
ValueErrorr   rD   rE   _reload_exifr=   tilerR   )rH   frameoriginal_exifmsgs       r   r1   zMpoImageFile.seek~   s   &((&&u-		f-TYY		&!T[[1_%ww||A+CS/!T[[!%%++D199== M1ftyy0$++tyy|B?OPQ	r   c                    | j                   S r   )rR   rG   s    r   r-   zMpoImageFile.tell   s    ||r   c                >    t         | _        | j                  |       | 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__rF   )jpeg_instancerU   s     r   adoptzMpoImageFile.adopt   s      #/&&x0r   )returnNoner   )rX   intrj   rk   )rb   rl   rj   rk   )rj   rl   )__name__
__module____qualname__formatformat_description!_close_exclusive_fp_after_loadingrE   rF   rY   r1   r-   staticmethodri    r   r   rA   rA   ^   s@    F,(-% 
&,  r   rA   z.mpoz	image/mpo)r   zImage.Imager   z	IO[bytes]r   zstr | bytesrj   rk   )
__future__r   r#   r3   r&   typingr    r   r   r   r	   _binaryr
   r   r?   rD   rA   register_saverp   register_save_allregister_extensionregister_mimert   r   r   <module>r}      s   ( #  	    ,/lG?00 Gb   L'' /   ++Y 7   ,,f 5   L'' 5r   