o
    h~                     @   sh   d dl mZmZmZ d dlmZ dd ZG dd dejZ	e
e	je ee	jd ee	jd d	S )
   )Image	ImageFileJpegImagePlugin)i16bec                 C   s   t | ||S N)r   _save)Zimfpfilename r
   Z/var/www/html/magazine_api/magazine_env/lib/python3.10/site-packages/PIL/MpoImagePlugin.pyr      s   r   c                   @   sX   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
dd ZedddZdS )MpoImageFileZMPOzMPO (CIPA DC-007)Fc                 C   s$   | j d tj|  |   d S )N    )r   seekr   JpegImageFile_open_after_jpeg_openselfr
   r
   r   r   +   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s1J  jd=  jdk _ j	 _
 j
 jd  d _d _d _d S )Ni  c                    s   g | ]}|d   j d  qS )Z
DataOffsetmpoffset)info).0Zmpentr   r
   r   
<listcomp>4   s    z1MpoImageFile._after_jpeg_open.<locals>.<listcomp>  r   r   r   )size_initial_sizeZ_getmpmpinfoZn_frames_MpoImageFile__mpoffsetslenr   Zis_animatedr   _MpoImageFile__fpr   _MpoImageFile__frameoffsetreadonly)r   mpheaderr
   r   r   r   0   s   


zMpoImageFile._after_jpeg_openc                 C   s   | j | d S r   )r   r   )r   posr
   r
   r   	load_seekD   s   zMpoImageFile.load_seekc                 C   s  |  |sd S | j| _| j| | _| j| jd  | jd}|s&td| j| _	t
|dkrmt
| jdd }t| j|| jd< | jd | d d }|drl|  d	}d
|v rld|v rl|d
 |d f| _	n	d| jv rv| jd= dd| j | j| jdffg| _|| _d S )N   zNo data found for framei  exifr   	AttributeZMPTypezLarge Thumbnailii  i  i  Zjpeg)r   r    )Z_seek_checkr   r   r   r    r   read
ValueErrorr   _sizei16r   
_safe_readr   r   
startswithZgetexifZget_ifdr   modeZtiler   )r   framesegmentnZmptyper&   r
   r
   r   r   G   s,   



zMpoImageFile.seekc                 C   s   | j S r   )r   r   r
   r
   r   tella   s   zMpoImageFile.tellc                 C   sP   z#z| j | jkr| j   W n	 ty   Y nw W d | _ d S W d | _ d S d | _ w r   )r   r   closeAttributeErrorr   r
   r
   r   
_close__fpd   s   

zMpoImageFile._close__fpc                 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__r   )Zjpeg_instancer"   r
   r
   r   adoptm   s   
zMpoImageFile.adoptr   )__name__
__module____qualname__formatformat_descriptionZ!_close_exclusive_fp_after_loadingr   r   r$   r   r3   r6   staticmethodr8   r
   r
   r
   r   r   %   s    
	r   z.mpoz	image/mpoN)r(   r   r   r   _binaryr   r,   r   r   r   Zregister_saver<   Zregister_extensionZregister_mimer
   r
   r
   r   <module>   s   	`