o �J�h �@s�ddlmZddlZddlZddlZddlmZmZmZddl m Z m Z m Z m Z mZddlmZddd�Zddd�ZGdd�de j�Ze �eje�e �eje�e �ejd�e �ejd�dS)�)� annotationsN)�IO�Any�cast�)�Image� ImageFile� ImageSequence�JpegImagePlugin�TiffImagePlugin)�o32le�im� Image.Image�fp� IO[bytes]�filename� str | bytes�return�NonecCst�|||�dS�N)r �_save)r rr�r�PC:\pinokio\api\whisper-webui.git\app\env\lib\site-packages\PIL\MpoImagePlugin.pyr%src Cs�|j�dg�}|st|dd�st|||�dSd}g}t�|g|�D]Z}t�|�D]R}|sjdt� dd�dd |jd <|j�d �}t |t j �rQ|� �}||jd <|r[|d t|�7}t�|||�|�|���q)|�|d �|�|��|d�q)q"t��} d| d<t|�| d<d} d} t|�D]%\} } | dkr�d}nd}| t� d|| | dd�7} | dkr�| |8} | | 7} q�| | d<|�|�|�dtd�| � d��|�dtj�dS)N� append_images� is_animatedF�s��z>H�XsMPFsR �extra�exif��JPEG�����s0100i����riz<LLLHH��sII*�)� encoderinfo�get�getattrr� itertools�chainr �Iterator�struct�pack� isinstancer�Exif�tobytes�lenr �append�tell�saver �ImageFileDirectory_v2� enumerate�seek�writer �os�SEEK_END)r rrrZ mpf_offset�offsets� imSequence�im_framer�ifd� mpentriesZ data_offset�i�sizeZmptyperrr� _save_all)sN �    �   rBc@s^eZdZdZdZdZddd�Zddd d �Zddd�Zddd�Z ddd�Z e dd dd��Z dS)!� MpoImageFileZMPOzMPO (CIPA DC-007)FrrcCs$|j�d�tj�|�|��dS)Nr)rr7r � JpegImageFile�_open�_after_jpeg_open��selfrrrrEds   zMpoImageFile._openN�mpheader�dict[int, Any] | Nonecs�|dur|n����_�jdurd}t|���jd�_�fdd��jdD��_d�jd<�jt�j�ks8J��jd=�jdk�_�j�_ �j � �jd�d�_ d�_ d�_ dS) Nz(Image appears to be a malformed MPO filer"csg|] }|d�jd�qS)� DataOffset�mpoffset)�info)�.0ZmpentrGrr� <listcomp>os�z1MpoImageFile._after_jpeg_open.<locals>.<listcomp>r$rrLr)�_getmpZmpinfo� ValueError�n_frames�_MpoImageFile__mpoffsetsr1rMrr�_fpr7�_MpoImageFile__frame�offset�readonly)rHrI�msgrrGrrFis"   �   zMpoImageFile._after_jpeg_open�pos�intcCs|j�|�dSr)rTr7)rHrYrrr� load_seekszMpoImageFile.load_seek�framecCs�|�|�sdS|j|_|j||_|j�d�}d|jvr |jd=|j�|jd�|j�d�s5d}t |��|j�|j�t j � |�|j�d�|krN|� �t�dd|j|j|jdd�g|_||_dS)Nr�zNo data found for frame�jpeg)rrrr!)� _seek_checkrTrrSrVrMr'r7�readrQr rDrE� _reload_exifr�_TilerA�tilerU)rHr\Z original_exifrXrrrr7�s$       � zMpoImageFile.seekcCs|jSr)rUrGrrrr3�szMpoImageFile.tell� jpeg_instance�JpegImagePlugin.JpegImageFilecCst|_tt|�}|�|�|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. )rC� __class__rrF)rdrIZ mpo_instancerrr�adopt�s  zMpoImageFile.adopt)rrr)rIrJrr)rYrZrr)r\rZrr)rrZ)rdrerIrJrrC) �__name__� __module__� __qualname__�format�format_description�!_close_exclusive_fp_after_loadingrErFr[r7r3� staticmethodrgrrrrrC_s     �rCz.mpoz image/mpo)r rrrrrrr)� __future__rr)r9r,�typingrrr�rrr r r �_binaryr rrBrDrC� register_saverk�register_save_all�register_extension� register_mimerrrr�<module>s    6Z
Memory