o
    õ·i¶~  ã                   @  sì  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
ddlmZmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ d
Zerbd dlmZmZ ddlmZ d×dd„Zd×dd„Zd×dd„Z d×dd„Z!d×dd„Z"i ddde!f“d d!d"e!f“d#d$d%e!f“d&d'd(e!f“d)d*d+ef“d,d-d.e!f“d/d0d1e!f“d2d3d4e!f“d5d6“d7d8d9e!f“d:d;d<e!f“d=d>d?e!f“d@dAdBef“dCdDdEe!f“dFdGdHe!f“dIdJdKe!f“dLdM“i dNdO“dPdQ“dRdS“dTdU“dVdW“dXdY“dZd[“d\d]“d^d_“d`dadbef“dcddde"f“dedfdgef“dhdidjef“dkdldme!f“dndodpef“dqdrdsef“dtdudvef“¥i dwdxdyef“dzd{d|ef“d}d~def“d€d�d‚ef“dƒd„d…ef“d†d‡dˆef“d‰dŠd‹ef“dŒd�dŽef“d�d�d‘ef“d’d“d”ef“d•d–d—ef“d˜d™dšef“d›dœd�ef“dždŸd ef“d¡d¢“d£d¤“d¥d¦“¥d§d¨d©dªd«d¬d­d®d¯d°d±dd²e fd³œ¥Z#dØd·d¸„Z$G d¹d„ dejƒZ%dÙd»d¼„Z&dÙd½d¾„Z'd¿d¿dÀdÀdÁdÂdÃœZ(dÄZ)d ddÅdÆœZ*dÚdÉdÊ„Z+dÛdÏdÐ„Z,	dÜdÝdÓdÔ„Z-e .e%j/e-e$¡ e 0e%j/e,¡ e 1e%j/g dÕ¢¡ e 2e%j/dÖ¡ dS )Þé    )ÚannotationsNé   )ÚImageÚ	ImageFile)Úi16be)Úi32be)Úo8)Úo16be)ÚpresetsF)ÚIOÚAny©ÚMpoImageFileÚselfÚJpegImageFileÚmarkerÚintÚreturnÚNonec                 C  s4   | j d usJ ‚t| j  d¡ƒd }t | j |¡ d S )Né   )ÚfpÚi16Úreadr   Ú
_safe_read)r   r   Ún© r   úYC:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-packages\PIL/JpegImagePlugin.pyÚSkip?   s   r   c                 C  s®  | j d usJ ‚t| j  d¡ƒd }t | j |¡}d|d@ › �}|| j|< | j ||f¡ |dkrˆ| d¡rˆt|dƒ | j	d< }t
|dƒ| j	d	< z|d
 }t|dƒt|dƒf}W n
 tya   Y d S w |dkrl|| j	d< n|dkr|tdd„ |D ƒƒ| j	d< || j	d< || j	d< d S |dkr¶| d¡r¶d| j	v r¥| j	d  |dd … 7  < d S || j	d< | j  ¡ | d | _d S |dkrÌ| d¡rÌ| dd¡d | j	d< d S |dkrÜ| d¡rÜ|| j	d< d S |dkrí| d¡rí| j |¡ d S |dk�r…| d¡�r…d }| j	 d!i ¡}	|||d" … d#k�rƒz]|d"7 }t||ƒ}
|d7 }|| }|d| 7 }||d@ 7 }t||ƒ}|d"7 }|||| … }|
d$k�rZt|d%ƒd& t|d"ƒt|dƒd& t|d'ƒd(œ|	|
< n||	|
< ||7 }||d@ 7 }W n tj�yu   Y d S w |||d" … d#k�sd S d S |d)k�r±| d*¡�r±t|dƒ| j	d+< z|d, }W n t�y©   Y d S w || j	d-< d S |dk�rÓ| d.¡�rÕ|d"d … | j	d/< | j  ¡ | d" | j	d0< d S d S d S )1Nr   ÚAPPé   éàÿ  s   JFIFé   Zjfifé   Zjfif_versioné   é   é
   r   Údpic                 s  s   � | ]}|d  V  qdS )çR¸…ëQ@Nr   )Ú.0Údr   r   r   Ú	<genexpr>b   s   € zAPP.<locals>.<genexpr>Ú	jfif_unitÚjfif_densityéáÿ  s   Exif  Úexifé   ó   http://ns.adobe.com/xap/1.0/ ó    Úxmpéâÿ  s   FPXR Zflashpixó   ICC_PROFILE éíÿ  s   Photoshop 3.0 é   Ú	photoshopé   s   8BIMií  r   i   é   )ZXResolutionZDisplayedUnitsXZYResolutionZDisplayedUnitsYéîÿ  s   AdobeÚadobeé   Úadobe_transforms   MPF ÚmpZmpoffset)r   r   r   r   r   ÚappÚapplistÚappendÚ
startswithÚinfoÚdivmodÚ	ExceptionÚtupleÚtellÚ_exif_offsetÚsplitÚicclistÚ
setdefaultÚi32ÚstructÚerrorÚ
IndexError)r   r   r   Úsr?   Úversionr+   r,   Úoffsetr7   ÚcodeZname_lenÚsizeÚdatar=   r   r   r   r   E   sŽ   
ÿ





üÿæÿûr   c                 C  sX   | j d usJ ‚t| j  d¡ƒd }t | j |¡}|| jd< || jd< | j d|f¡ d S )Nr   ÚcommentÚCOM)	r   r   r   r   r   rC   r?   r@   rA   )r   r   r   rP   r   r   r   rW   °   s   

rW   c           	      C  s®  | j d usJ ‚t| j  d¡ƒd }t | j |¡}t|dƒt|dƒf| _| jd ur2| j| jjkr2d | _|d | _	| j	dkrGd| j	› d�}t
|ƒ‚|d | _| jdkrUd	| _n| jdkr^d
| _n| jdkrgd| _nd| j› d�}t
|ƒ‚|dv r€d | jd< | jd< | jr¬| j ¡  | jd d t| jƒkr¢dd„ | jD ƒ}d |¡}nd }|| jd< g | _tdt|ƒdƒD ] }|||d … }| j |d |d d |d d@ |d f¡ q´d S )Nr   é   r   r   r$   zcannot handle z-bit layersr!   ÚLÚRGBr8   ÚCMYKz-layer images)éÂÿ  éÆÿ  éÊÿ  éÎÿ  ÚprogressiveÚprogressioné   c                 S  s   g | ]}|d d… ‘qS )r6   Nr   )r(   Úpr   r   r   Ú
<listcomp>â   s    zSOF.<locals>.<listcomp>ó    Úicc_profiler/   é   r   )r   r   r   r   r   Ú_sizeÚ_imrT   ÚimÚbitsÚSyntaxErrorÚlayersÚ_moderC   rJ   ÚsortÚlenÚjoinÚrangeÚlayerrA   )	r   r   r   rP   ÚmsgZprofilerf   ÚiÚtr   r   r   ÚSOF¼   sB   







.ýrw   c                   sê   | j d usJ ‚t| j  d¡ƒd }t | j |¡}t|ƒrs|d }|d dkr(dnd}d|d  }t|ƒ|k r<d}t|ƒ‚t |dkrDdnd|d|… ¡‰ tj	d	krY|dkrYˆ  
¡  ‡ fd
d„tD ƒ| j|d@ < ||d … }t|ƒsd S d S )Nr   r   rg   r   é@   zbad quantization table markerÚBÚHÚlittlec                   s   g | ]}ˆ | ‘qS r   r   )r(   ru   ©rU   r   r   rd     ó    zDQT.<locals>.<listcomp>r   )r   r   r   r   r   rp   rl   ÚarrayÚsysÚ	byteorderZbyteswapÚzigzag_indexÚquantization)r   r   r   rP   ÚvZ	precisionZ	qt_lengthrt   r   r|   r   ÚDQTï   s     õr„   iÀÿ  ZSOF0zBaseline DCTiÁÿ  ZSOF1zExtended Sequential DCTr\   ZSOF2zProgressive DCTiÃÿ  ZSOF3zSpatial losslessiÄÿ  ZDHTzDefine Huffman tableiÅÿ  ZSOF5zDifferential sequential DCTr]   ZSOF6zDifferential progressive DCTiÇÿ  ZSOF7zDifferential spatialiÈÿ  )ZJPGÚ	ExtensionNiÉÿ  ZSOF9zExtended sequential DCT (AC)r^   ZSOF10zProgressive DCT (AC)iËÿ  ZSOF11zSpatial lossless DCT (AC)iÌÿ  ZDACz%Define arithmetic coding conditioningiÍÿ  ZSOF13z Differential sequential DCT (AC)r_   ZSOF14z!Differential progressive DCT (AC)iÏÿ  ZSOF15zDifferential spatial (AC)iÐÿ  )ZRST0z	Restart 0NiÑÿ  )ZRST1z	Restart 1NiÒÿ  )ZRST2z	Restart 2NiÓÿ  )ZRST3z	Restart 3NiÔÿ  )ZRST4z	Restart 4NiÕÿ  )ZRST5z	Restart 5NiÖÿ  )ZRST6z	Restart 6Ni×ÿ  )ZRST7z	Restart 7NiØÿ  )ZSOIzStart of imageNiÙÿ  )ZEOIzEnd of imageNéÚÿ  ZSOSzStart of scaniÛÿ  zDefine quantization tableiÜÿ  ZDNLzDefine number of linesiÝÿ  ZDRIzDefine restart intervaliÞÿ  ZDHPzDefine hierarchical progressionißÿ  ZEXPzExpand reference componentr    ZAPP0zApplication segment 0r-   ÚAPP1zApplication segment 1r3   ZAPP2zApplication segment 2iãÿ  ZAPP3zApplication segment 3iäÿ  ZAPP4zApplication segment 4iåÿ  ZAPP5zApplication segment 5iæÿ  ZAPP6zApplication segment 6içÿ  ZAPP7zApplication segment 7ièÿ  ZAPP8zApplication segment 8iéÿ  ZAPP9zApplication segment 9iêÿ  ZAPP10zApplication segment 10iëÿ  ZAPP11zApplication segment 11iìÿ  ZAPP12zApplication segment 12r5   ZAPP13zApplication segment 13r:   ZAPP14zApplication segment 14iïÿ  ZAPP15zApplication segment 15iðÿ  )ZJPG0zExtension 0Niñÿ  )ZJPG1zExtension 1Niòÿ  )ZJPG2zExtension 2N)ZJPG3zExtension 3N)ZJPG4zExtension 4N)ZJPG5zExtension 5N)ZJPG6zExtension 6N)ZJPG7zExtension 7N)ZJPG8zExtension 8N)ZJPG9zExtension 9N)ZJPG10zExtension 10N)ZJPG11zExtension 11N)ZJPG12zExtension 12N)ZJPG13zExtension 13NÚComment)ióÿ  iôÿ  iõÿ  iöÿ  i÷ÿ  iøÿ  iùÿ  iúÿ  iûÿ  iüÿ  éýÿ  iþÿ  ÚprefixÚbytesÚboolc                 C  s
   |   d¡S )Ns   ÿØÿ)rB   )rŠ   r   r   r   Ú_acceptN  s   
r�   c                      sz   e Zd ZdZdZd"dd„Zd#‡ fdd	„Zd$‡ fdd„Zd%dd„Zd&dd„Z	d"dd„Z
d'dd„Zd"dd„Zd'd d!„Z‡  ZS )(r   ÚJPEGzJPEG (ISO 10918)r   r   c                 C  sX  | j d usJ ‚| j  d¡}t|ƒsd}t|ƒ‚d}d | _| _d| _g | _i | _i | _	i | _
i | _g | _g | _	 |d }|dkrM|| j  d¡ }t|ƒ}n| j  d¡}q7|tv r�t| \}}}|d urh|| |ƒ |dkr†| j}| jd	krvd
}t dd| j d|df¡g| _q¦| j  d¡}n|dv r”d}n|dkrŸ| j  d¡}nd}t|ƒ‚q8|  ¡  d S )NrX   znot a JPEG fileó   ÿr   Téÿ   r   r†   r[   úCMYK;IÚjpeg©r   r   Ú >   r   iÿÿ  i ÿ  zno marker found)r   r   r�   rl   rk   rm   rH   rs   Z_huffman_dcZ_huffman_acr‚   r?   r@   rJ   r   ÚMARKERÚmoder   Ú_TilerT   ÚtileÚ_read_dpi_from_exif)r   rP   rt   ru   ÚnameÚdescriptionÚhandlerÚrawmoder   r   r   Ú_open[  sT   


ÿá!zJpegImageFile._openú	list[Any]c                   s   t ƒ  ¡ | j| jg S ©N)ÚsuperÚ__getstate__rm   rs   ©r   ©Ú	__class__r   r   r¢   ”  s   zJpegImageFile.__getstate__Ústatec                   s$   |dd … \| _ | _tƒ  |¡ d S )Nr/   )rm   rs   r¡   Ú__setstate__)r   r¦   r¤   r   r   r§   —  s   zJpegImageFile.__setstate__Ú
read_bytesr   r‹   c                 C  s<   | j dusJ ‚| j  |¡}|stjrt| dƒsd| _dS |S )z›
        internal: read more image data
        For premature EOF and LOAD_TRUNCATED_IMAGES adds EOI marker
        so libjpeg can finish decoding
        NÚ_endedTs   ÿÙ)r   r   r   ZLOAD_TRUNCATED_IMAGESÚhasattrr©   )r   r¨   rP   r   r   r   Ú	load_read›  s   zJpegImageFile.load_readr–   ú
str | NonerT   útuple[int, int] | Noneú0tuple[str, tuple[int, int, float, float]] | Nonec                 C  s~  t | jƒdkr	d S | jrd S | jd \}}}}d}| j}t|tƒs#J ‚|d dkr4|dv r4|| _|df}|r�t| jd |d  | jd |d  ƒ}dD ]}	||	krS qTqK|d usZJ ‚|d |d |d |d  |	 d |	 |d  |d |d  |	 d |	 |d  f}| jd |	 d |	 | jd |	 d |	 f| _|	}t	 
||||¡g| _|df| _dd|d | |d | f}
| j|
fS )	Nr   r   rZ   )rY   ÚYCbCrr”   )r$   r8   r   r   r   rX   )rp   r˜   ZdecoderconfigrT   Ú
isinstancerF   rn   Úminrh   r   r—   r–   )r   r–   rT   r)   ÚeÚoÚaZscaleZoriginal_sizerP   Zboxr   r   r   Údraft¬  s:   &ÿ""ü.

zJpegImageFile.draftc                 C  s  t  ¡ \}}t |¡ tj | j¡rt dd|| jg¡ nzt 	|¡ W n	 t
y-   Y nw d}t|ƒ‚z/t |¡�}| ¡  |j| _W d   ƒ n1 sMw   Y  W zt 	|¡ W n t
yc   Y nw zt 	|¡ W w  t
yt   Y w w | jj| _| jj| _g | _d S )NZdjpegz-outfilezInvalid Filename)ÚtempfileÚmkstempÚosÚcloseÚpathÚexistsÚfilenameÚ
subprocessÚ
check_callÚunlinkÚOSErrorÚ
ValueErrorr   ÚopenÚloadrj   r–   rn   rT   rh   r˜   )r   Úfrº   rt   ri   r   r   r   Ú
load_djpegÔ  s<   
ÿ
þ€ÿþÿ


zJpegImageFile.load_djpegúdict[int, Any] | Nonec                 C  ó   t | ƒS r    )Ú_getexifr£   r   r   r   rÈ   ó  ó   zJpegImageFile._getexifc                 C  sÈ   d| j v s
d| j vrd S zA|  ¡ }|d }|d }zt|d ƒ|d  }W n ty0   |}Y nw t |¡r<d}t|ƒ‚|dkrD|d	9 }||f| j d< W d S  tjt	t
tttfyc   d
| j d< Y d S w )Nr&   r.   i(  i  r   r   zDPI is not a numberrX   r'   )éH   rÊ   )rC   ÚgetexifÚfloatÚ	TypeErrorÚmathÚisnanrÁ   rM   rN   ÚKeyErrorrl   ÚZeroDivisionError)r   r.   Zresolution_unitZx_resolutionr&   rt   r   r   r   r™   ö  s6   ÿ

úøz!JpegImageFile._read_dpi_from_exifc                 C  rÇ   r    )Ú_getmpr£   r   r   r   rÒ     rÉ   zJpegImageFile._getmp)r   r   )r   rŸ   )r¦   rŸ   r   r   )r¨   r   r   r‹   )r–   r¬   rT   r­   r   r®   )r   rÆ   )Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionrž   r¢   r§   r«   rµ   rÅ   rÈ   r™   rÒ   Ú__classcell__r   r   r¤   r   r   W  s    
9


(

rÆ   c                 C  s   d| j vrd S |  ¡  ¡ S )Nr.   )rC   rË   Z_get_merged_dictr£   r   r   r   rÈ     s   
rÈ   c              
   C  s  z| j d }W n
 ty   Y d S w t |¡}| d¡}| d¡r#dnd}ddlm} z| |¡}| 	|j
¡ | |¡ t|ƒ}W n tyT } zd}	t|	ƒ|‚d }~ww z|d	 }
W n tyn } zd
}	t|	ƒ|‚d }~ww g }z€|d }t|
ƒD ]p}t |› d�||d ¡}d}tt||ƒƒ}t|d d@ ƒt|d d@ ƒt|d d@ ƒ|d d@ d? |d d@ d? |d d@ dœ}|d dkrÇd|d< nd}	t|	ƒ‚dddd d!d"d#d$œ}| |d% d&¡|d%< ||d< | |¡ qz||d< W |S  t�y } zd'}	t|	ƒ|‚d }~ww )(Nr>   r$   s   MM *ú>ú<r   )ÚTiffImagePluginz)malformed MP Index (unreadable directory)é°  z(malformed MP Index (no number of images)i°  ZLLLHHrg   )Ú	AttributeÚSizeZ
DataOffsetZEntryNo1ZEntryNo2rÝ   l        i   @i    i   é   i   é   iÿÿÿ )ZDependentParentImageFlagZDependentChildImageFlagZRepresentativeImageFlagZReservedÚImageDataFormatÚMPTyperá   r   rŽ   z!unsupported picture format in MPOÚ	Undefinedz Large Thumbnail (VGA Equivalent)z$Large Thumbnail (Full HD Equivalent)zMulti-Frame Image (Panorama)zMulti-Frame Image: (Disparity)z Multi-Frame Image: (Multi-Angle)zBaseline MP Primary Image)r   i  i  i  i  i  i   râ   ÚUnknownz!malformed MP Index (bad MP Entry))rC   rÐ   ÚioÚBytesIOr   rB   r”   rÛ   ZImageFileDirectory_v2ÚseekÚnextrÃ   ÚdictrE   rl   rr   rM   Úunpack_fromÚziprŒ   ÚgetrA   )r   rU   Úfile_contentsÚheadZ
endiannessrÛ   rC   r>   r²   rt   ZquantZ	mpentriesZrawmpentriesZentrynumZunpackedentryÚlabelsZmpentryZmpentryattrZ	mptypemapr   r   r   rÒ     s€   ÿ




€þ
€þÿ
ú
ù	
ú
€þrÒ   rY   rZ   r‘   r¯   )Ú1rY   rZ   ZRGBXr[   r¯   )@r   r   r!   r/   r6   r   rß   é   r   r8   r#   rb   rg   é   é   é*   rX   r$   r9   é   é   é   é)   é+   é	   r<   é   rà   é   é(   é,   é5   r%   é   é   é    é'   é-   é4   é6   é   é   é!   é&   é.   é3   é7   é<   é   é"   é%   é/   é2   é8   é;   é=   é#   é$   é0   é1   é9   é:   é>   é?   r   ))r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   rj   úImage.Imagec                 C  sZ   t | tƒr
| jdv rdS | jd dd… | jd dd…  | jd dd…  }t |d¡S )N)r   r8   éÿÿÿÿr   r   rX   r   )r°   r   rm   rs   Ú	samplingsrì   )rj   Zsamplingr   r   r   Úget_sampling‰  s   6r"  r   ú	IO[bytes]r¼   ústr | bytesc                 C  sx  | j dks
| jdkrd}t|ƒ‚zt| j }W n ty/ } zd| j› d�}t|ƒ|‚d }~ww | j}dd„ | dd¡D ƒ}| d	d
¡}| dd
¡}	| d¡}
|dkrZd
}d}	d}
n=|t	v rpt	| }d
}| dd
¡}	| d¡}
n't
|tƒs{d}t|ƒ‚|	t	v r‡t	|	  dd
¡}	t
|
tƒr—|
t	v r—t	|
  d¡}
|	dkržd}	n(|	dkr¥d}	n!|	dkr¬d}	n|	dkr³d}	n|	dkrÆ| jdkrÂd}t|ƒ‚t| ƒ}	d:dd„}|
dkrà| jdkrÚd}t|ƒ‚t| dd ƒ}
||
ƒ}
| dd¡}d}| d ¡ }�rd!}|| }t|ƒ|k�rd"}t|ƒ‚td| t|ƒ ƒ}|d#| d$ | 7 }| d%¡ }�rjd&}|| }g }|�r@| |d |… ¡ ||d … }|�s.d}|D ]%}td| t|ƒ ƒ}|d'| d( t|ƒ tt|ƒƒ | 7 }|d7 }�qD| d)| j d)¡¡}| d*d+¡�p€| d,d+¡}| d-d+¡}| d.d¡}t
|tjƒ�r˜| ¡ }t|ƒ|k�r¥d/}t|ƒ‚||| d0d¡|| d1d+¡| d2d¡||	| d3d¡| d4d¡|
|||f| _|�sÐ|�r| jd5k�rãd6| jd  | jd  }n!|d7k�sí|d
k�rúd| jd  | jd  }n
| jd | jd  }|�r|t|ƒd8 7 }|�r|t|ƒd 7 }ntt|ƒd8 t|ƒd ƒ}t | |t d9d| j d|¡g|¡ d S );Nr   z cannot write empty image as JPEGzcannot write mode z as JPEGc                 S  s   g | ]}t |ƒ‘qS r   )Úround)r(   Úxr   r   r   rd   ¤  r}   z_save.<locals>.<listcomp>r&   r“   Úqualityr   ÚsubsamplingÚqtablesZkeepr‚   zInvalid quality settingz4:4:4z4:2:2r   z4:2:0r   z4:1:1rŽ   z3Cannot use 'keep' when original image is not a JPEGúKstr | tuple[list[int], ...] | list[list[int]] | dict[int, list[int]] | Noner   úlist[list[int]] | Nonec                   sV  ˆd u rˆS t ˆtƒr9zdd„ ˆ ¡ D ƒ‰ W n ty) } zd}t|ƒ|‚d }~ww ‡ fdd„tdtˆ ƒdƒD ƒ‰t ˆtttfƒr©t ˆtƒrT‡fdd„ttˆƒƒD ƒ‰n	t ˆtƒr]tˆƒ‰dtˆƒ  k ridk spn d	}t|ƒ‚t	ˆƒD ]2\}}zt|ƒdkr…d}t
|ƒ‚t d
|¡}W n t
yŸ } zd}t|ƒ|‚d }~ww t|ƒˆ|< qtˆS d S )Nc                 S  s.   g | ]}|  d d¡d   ¡ D ]}t|ƒ‘qqS )ú#r   r   )rI   r   )r(   ÚlineÚnumr   r   r   rd   Õ  s    ýþÿz3_save.<locals>.validate_qtables.<locals>.<listcomp>zInvalid quantization tablec                   s   g | ]
}ˆ ||d  … ‘qS )rx   r   )r(   rP   )Úlinesr   r   rd   Þ  s    r   rx   c                   s   g | ]
}|ˆ v rˆ | ‘qS r   r   )r(   Úkey)r)  r   r   rd   á  s
    ÿÿr!   z$None or too many quantization tablesrz   )r°   ÚstrÚ
splitlinesrÁ   rr   rp   rF   Úlistré   Ú	enumeraterÍ   r~   )r)  r²   rt   ÚidxÚtableZtable_arrayr   )r/  r)  r   Úvalidate_qtablesÌ  sJ   

þ
€þ


ÿ

€þëz_save.<locals>.validate_qtablesÚextrare   r‰   r2   ró   zXMP data is too longs   ÿár0   rf   r6   s   ÿâr4   rV   r`   Fra   Úoptimizer.   zEXIF data is too longZsmoothZkeep_rgbZ
streamtypeZrestart_marker_blocksZrestart_marker_rowsr[   r8   é_   r!   r’   )r)  r*  r   r+  )ÚwidthÚheightrÁ   ÚRAWMODEr–   rÐ   rÀ   Zencoderinforì   r
   r°   r   r1  rÖ   r"  Úgetattrrp   Úo16rA   r   rC   r   ZExifÚtobytesZencoderconfigrT   Úmaxr   Ú_saver—   )rj   r   r¼   rt   r�   r²   rC   r&   r'  r(  r)  Úpresetr7  r8  ZMAX_BYTES_IN_MARKERr2   Zoverhead_lenZmax_data_bytes_in_markerrT   rf   Úmarkersru   r   rV   r`   r9  r.   Úbufsizer   r   r   rB  —  sú   
€þ



*
þÿþý
üûÿ




ò€ÿrB  ústr | bytes | NoneúJpegImageFile | MpoImageFilec              	   C  s°   t | |ƒ}z8| ¡ }|d ur8|d dkr;|jD ]\}}|dkr(d|v r(|  W S qddlm} | ||¡}W |S W |S W |S  ttfyI   Y |S  tyW   t	 
d¡ Y |S w )NrÜ   r   r‡   s    hdrgm:Version="r   zTImage appears to be a malformed MPO file, it will be interpreted as a base JPEG file)r   rÒ   r@   ÚMpoImagePluginr   ZadoptrÍ   rO   rl   ÚwarningsÚwarn)r   r¼   rj   ZmpheaderÚsegmentÚcontentr   r   r   r   Újpeg_factory\  s0   

€	îîøûÿûrM  )z.jfifz.jpez.jpgz.jpegz
image/jpeg)r   r   r   r   r   r   )rŠ   r‹   r   rŒ   )r   r   r   rÆ   )rj   r  r   r   )rj   r  r   r#  r¼   r$  r   r   r    )r   r#  r¼   rF  r   rG  )3Ú
__future__r   r~   rå   rÎ   r¸   rM   r½   r   r¶   rI  r”   r   r   Ú_binaryr   r   r   rL   r   r	   r?  ZJpegPresetsr
   ÚTYPE_CHECKINGÚtypingr   r   rH  r   r   r   rW   rw   r„   r•   r�   r   rÈ   rÒ   r=  r�   r!  r"  rB  rM  Zregister_openrÖ   Zregister_saveZregister_extensionsZregister_mimer   r   r   r   Ú<module>   sN  !


k

3
ÿ
þ
ý
ü
û
ú
ù
ø	÷

ö
õ
ô
ó
ò
ñ
ðïîíìëêéèçæ
å
ä
ã
â
á
 à
!ß
"Þ
#Ý
$Ü
%Û
&Ú
'Ù
(Ø
)×
*Ö
+Õ
,Ô
-Ó
.Ò
/Ñ
0Ð1Ï2Î3Í4Á
C	 
A
Pú
ý

 Gÿ