a
    ç´«j*|  ã                A   @  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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dlmZ dZerÐddlmZ ddddœdd„Z ddddœdd„Z!ddddœdd„Z"ddddœdd„Z#ddddœdd„Z$dde#fdde#fd d!e#fd"d#e#fd$d%e fd&d'e#fd(d)e#fd*d+e#fd,d-d.e#fd/d0e#fd1d2e#fd3d4e fd5d6e#fd7d8e#fd9d:e#fd;d<d=d>d?d@dAdBdCdDdEdFe fddGe$fdHdIe fdJdKe fdLdMe#fdNdOe fdPdQe!fdRdSe!fdTdUe!fdVdWe!fdXdYe!fdZd[e!fd\d]e!fd^d_e!fd`dae!fdbdce!fdddee!fdfdge!fdhdie!fdjdke!fdldme!fdndoe!fdpdqdrdsdtdudvdwdxdydzd{d|d}dd~e"fdœ?Z%d€d�d‚œdƒd„„Z&G d…d„ dejƒZ'dd†d‡œdˆd‰„Z(dd†d‡œdŠd‹„Z)dŒdŒd�d�dŽd�d�œZ*d‘Z+d dd’d“œZ,d”dd•œd–d—„Z-d”d˜d™ddšœd›dœ„Z.d”d˜d™ddšœd�dž„Z/d¦d˜dŸd d¡œd¢d£„Z0e 1e'j2e0e&¡ e 3e'j2e.¡ e 4e'j2g d¤¢¡ e 5e'j2d¥¡ dS )§é    )ÚannotationsN)ÚIOÚAnyé   )ÚImageÚ	ImageFile)Úi16be)Úi32be)Úo8)Úo16be)Ú	deprecate)ÚpresetsF©ÚMpoImageFileÚJpegImageFileÚintÚNone)ÚselfÚmarkerÚreturnc                 C  s&   t | j d¡ƒd }t | j|¡ d S )Né   )Úi16ÚfpÚreadr   Ú
_safe_read)r   r   Ún© r   úR/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/PIL/JpegImagePlugin.pyÚSkip?   s    r   c                 C  s’  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y¶   Y nJ0 |dkrÌ|| j	d< n |dkrìtdd„ |D ƒƒ| j	d< || j	d< || j	d< �nŠ|dk�rd| d¡�rdd| j	v �rB| j	d  |dd … 7  < n|| j	d< | j ¡ | d | _�n*|dk�r”| d¡�r”| dd¡d | j	d< �nú|dk�r¸| d¡�r¸|| j	d< �nÖ|dk�rÞ| d¡�rÞ| j |¡ �n°|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�r¸t|d%ƒd& t |d"ƒt|dƒd& t |d'ƒd(œ|	|
< n||	|
< ||7 }||d@ 7 }W n tj�yò   Y �qŽY n0 �qn”|d)k�rN| d*¡�rNt |dƒ| j	d+< z|d, }W n t�y@   Y n0 || j	d-< n@|dk�rŽ| d.¡�rŽ|d"d … | j	d/< | j ¡ | d" | j	d0< 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>`   ó    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   ÚsrA   Úversionr-   r.   Úoffsetr9   ÚcodeZname_lenÚsizeÚdatar?   r   r   r   r   D   s‚    





ür   c                 C  sJ   t | j d¡ƒd }t | j|¡}|| jd< || jd< | j d|f¡ d S )Nr   ÚcommentÚCOM)	r   r   r   r   r   rE   rA   rB   rC   )r   r   r   rR   r   r   r   rY   ®   s
    

rY   c           	      C  sˆ  t | j d¡ƒd }t | j|¡}t |dƒt |dƒf| _|d | _| jdkrbd| j› d�}t|ƒ‚|d | _| jdkr~d	| _	n:| jdkr�d
| _	n(| jdkr¢d| _	nd| j› d�}t|ƒ‚|dv rÔd | j
d< | j
d< | j�r0| j ¡  | jd d t| jƒk�rdd„ | jD ƒ}d |¡}nd }|| j
d< g | _tdt|ƒdƒD ]B}|||d … }| j |d |d d |d d@ |d f¡ �q@d S )Nr   é   r   r   r%   zcannot handle z-bit layersr"   ÚLÚRGBr:   ÚCMYKz-layer images)éÂÿ  éÆÿ  éÊÿ  éÎÿ  ÚprogressiveÚprogressioné   c                 S  s   g | ]}|d d… ‘qS )r8   Nr   )r)   Úpr   r   r   Ú
<listcomp>Ü   r,   zSOF.<locals>.<listcomp>r,   Úicc_profiler1   é   r    )r   r   r   r   r   Ú_sizeÚbitsÚSyntaxErrorÚlayersÚ_moderE   rL   ÚsortÚlenÚjoinÚrangeÚlayerrC   )	r   r   r   rR   ÚmsgZprofilerg   ÚiÚtr   r   r   ÚSOF¹   s:    







rv   c                   sÒ   t | j d¡ƒd }t | j|¡}t|ƒrÎ|d }|d dkrBdnd}d|d  }t|ƒ|k rjd}t|ƒ‚t |dkrzdnd|d|… ¡‰ tj	d	kr¤|dkr¤ˆ  
¡  ‡ fd
d„tD ƒ| j|d@ < ||d … }q"d S )Nr   r   rh   r   é@   zbad quantization table markerÚBÚHÚlittlec                   s   g | ]}ˆ | ‘qS r   r   )r)   rt   ©rW   r   r   rf   ý   r,   zDQT.<locals>.<listcomp>r    )r   r   r   r   r   ro   rk   ÚarrayÚsysÚ	byteorderÚbyteswapÚzigzag_indexÚquantization)r   r   r   rR   ÚvÚ	precisionZ	qt_lengthrs   r   r{   r   ÚDQTé   s     r„   ZSOF0zBaseline DCTZSOF1zExtended Sequential DCTZSOF2zProgressive DCTZSOF3zSpatial losslessZDHTzDefine Huffman tableZSOF5zDifferential sequential DCTZSOF6zDifferential progressive DCTZSOF7zDifferential spatial)ZJPGÚ	ExtensionNZSOF9zExtended sequential DCT (AC)ZSOF10zProgressive DCT (AC)ZSOF11zSpatial lossless DCT (AC)ZDACz%Define arithmetic coding conditioningZSOF13z Differential sequential DCT (AC)ZSOF14z!Differential progressive DCT (AC)ZSOF15zDifferential spatial (AC))ZRST0z	Restart 0N)ZRST1z	Restart 1N)ZRST2z	Restart 2N)ZRST3z	Restart 3N)ZRST4z	Restart 4N)ZRST5z	Restart 5N)ZRST6z	Restart 6N)ZRST7z	Restart 7N)ZSOIzStart of imageN)ZEOIzEnd of imageNZSOSzStart of scanzDefine quantization tableZDNLzDefine number of linesZDRIzDefine restart intervalZDHPzDefine hierarchical progressionZEXPzExpand reference componentZAPP0zApplication segment 0ÚAPP1zApplication segment 1ZAPP2zApplication segment 2ZAPP3zApplication segment 3ZAPP4zApplication segment 4ZAPP5zApplication segment 5ZAPP6zApplication segment 6ZAPP7zApplication segment 7ZAPP8zApplication segment 8ZAPP9zApplication segment 9ZAPP10zApplication segment 10ZAPP11zApplication segment 11ZAPP12zApplication segment 12ZAPP13zApplication segment 13ZAPP14zApplication segment 14ZAPP15zApplication segment 15)ZJPG0zExtension 0N)ZJPG1zExtension 1N)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Áÿ  r^   iÃÿ  iÄÿ  iÅÿ  r_   iÇÿ  iÈÿ  iÉÿ  r`   iËÿ  iÌÿ  iÍÿ  ra   iÏÿ  iÐÿ  iÑÿ  iÒÿ  iÓÿ  iÔÿ  iÕÿ  iÖÿ  i×ÿ  iØÿ  iÙÿ  éÚÿ  iÛÿ  iÜÿ  iÝÿ  iÞÿ  ißÿ  r!   r/   r5   iãÿ  iäÿ  iåÿ  iæÿ  içÿ  ièÿ  iéÿ  iêÿ  iëÿ  iìÿ  r7   r<   iïÿ  iðÿ  iñÿ  iòÿ  ióÿ  iôÿ  iõÿ  iöÿ  i÷ÿ  iøÿ  iùÿ  iúÿ  iûÿ  iüÿ  éýÿ  iþÿ  ÚbytesÚbool)Úprefixr   c                 C  s
   |   d¡S )Ns   ÿØÿ)rD   )rŒ   r   r   r   Ú_acceptG  s    r�   c                      s¶   e Zd ZdZdZddœdd„Zddd	œd
d„Zddœ‡ fdd„Zdddœ‡ fdd„Zdddœdd„Z	ddddœdd„Z
ddœdd„Zddœd d!„Zddœd"d#„Zddœd$d%„Z‡  ZS )&r   ÚJPEGzJPEG (ISO 10918)r   )r   c                 C  sR  | j  d¡}t|ƒs d}t|ƒ‚d}d | _| _d| _g | _i | _i | _	i | _
i | _g | _g | _|d }|dkrŠ|| j  d¡ }t|ƒ}n| j  d¡}q`|tv �rt| \}}}|d urÂ|| |ƒ |dk�r| j}| jdkràd	}t d
d| j d|df¡g| _�qF| j  d¡}q`|dv �r d}q`|dk�r8| j  d¡}q`d}t|ƒ‚q`|  ¡  d S )NrZ   znot a JPEG fileó   ÿr   éÿ   r   rˆ   r]   úCMYK;IÚjpeg©r   r   Ú >   r   iÿÿ  i ÿ  zno marker found)r   r   r�   rk   rj   rl   rJ   rr   Z_huffman_dcZ_huffman_acr�   rA   rB   rL   r   ÚMARKERÚmoder   Ú_TilerV   ÚtileÚ_read_dpi_from_exif)r   rR   rs   rt   ÚnameÚdescriptionÚhandlerÚrawmoder   r   r   Ú_openT  sN    




ÿ


zJpegImageFile._openÚstrr   )rš   r   c                 C  s,   |dv r t |dƒ t| d| ƒS t|ƒ‚d S )N)Z
huffman_acZ
huffman_dcr;   Ú_)r   ÚgetattrÚAttributeError)r   rš   r   r   r   Ú__getattr__Œ  s    
zJpegImageFile.__getattr__z	list[Any]c                   s   t ƒ  ¡ | j| jg S ©N)ÚsuperÚ__getstate__rl   rr   ©r   ©Ú	__class__r   r   r¦   ’  s    zJpegImageFile.__getstate__)Ústater   c                   s$   |dd … \| _ | _tƒ  |¡ d S )Nr1   )rl   rr   r¥   Ú__setstate__)r   rª   r¨   r   r   r«   •  s    zJpegImageFile.__setstate__r   rŠ   )Ú
read_bytesr   c                 C  s.   | 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
        Ú_endedTs   ÿÙ)r   r   r   ZLOAD_TRUNCATED_IMAGESÚhasattrr­   )r   r¬   rR   r   r   r   Ú	load_read™  s
    zJpegImageFile.load_readz
str | Noneztuple[int, int] | Nonez0tuple[str, tuple[int, int, float, float]] | None)r–   rV   r   c                 C  s€  t | jƒdkrd S | jrd S | jd \}}}}d}| j}t|tƒsFJ ‚|d dkrh|dv rh|| _|df}|�r<t| jd |d  | jd |d  ƒ}dD ]}	||	kr˜ qªq˜|d us¶J ‚|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   r\   )r[   ÚYCbCrr”   )r%   r:   r   r   r   rZ   )ro   r˜   ZdecoderconfigrV   Ú
isinstancerH   rm   Úminri   r   r—   r–   )r   r–   rV   r*   ÚeÚoÚaÚscaleZoriginal_sizerR   Úboxr   r   r   Údraft©  s8    &""ü.
zJpegImageFile.draftc                 C  s  t  ¡ \}}t |¡ tj | j¡r:t dd|| jg¡ n.zt 	|¡ W n t
yZ   Y n0 d}t|ƒ‚z`t |¡� }| ¡  |j| _W d   ƒ n1 sš0    Y  W zt 	|¡ W qî t
yÆ   Y qî0 n$zt 	|¡ W n t
yê   Y n0 0 | jj| _| jj| _g | _d S )NZdjpegú-outfilezInvalid Filename)ÚtempfileÚmkstempÚosÚcloseÚpathÚexistsÚfilenameÚ
subprocessÚ
check_callÚunlinkÚOSErrorÚ
ValueErrorr   ÚopenÚloadÚimr–   rm   rV   ri   r˜   )r   Úfr¾   rs   Z_imr   r   r   Ú
load_djpegÑ  s2    
(ý

zJpegImageFile.load_djpegúdict[int, Any] | Nonec                 C  s   t | ƒS r¤   )Ú_getexifr§   r   r   r   rÌ   ð  s    zJpegImageFile._getexifc                 C  sÈ   d| j v sd| j vrd S z€|  ¡ }|d }|d }zt|d ƒ|d  }W n ty`   |}Y n0 t |¡rxd}t|ƒ‚|dkrˆ|d	9 }||f| j d< W n* tjt	t
tttfyÂ   d
| j d< Y n0 d S )Nr'   r0   i(  i  r   r   zDPI is not a numberrZ   r(   )éH   rÍ   )rE   ÚgetexifÚfloatÚ	TypeErrorÚmathÚisnanrÅ   rO   rP   ÚKeyErrorrk   ÚZeroDivisionError)r   r0   Zresolution_unitZx_resolutionr'   rs   r   r   r   r™   ó  s2    

ú
z!JpegImageFile._read_dpi_from_exifc                 C  s   t | ƒS r¤   )Ú_getmpr§   r   r   r   rÕ     s    zJpegImageFile._getmp)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionrž   r£   r¦   r«   r¯   r¸   rÊ   rÌ   r™   rÕ   Ú__classcell__r   r   r¨   r   r   P  s   8(rË   )r   r   c                 C  s   d| j vrd S |  ¡  ¡ S )Nr0   )rE   rÎ   Z_get_merged_dictr§   r   r   r   rÌ     s    
rÌ   c              
   C  s8  z| j d }W n ty"   Y d S 0 t |¡}| d¡}| d¡rFdnd}ddlm} z,| |¡}| 	|j
¡ | |¡ t|ƒ}W n2 ty´ } zd}	t|	ƒ|‚W Y d }~n
d }~0 0 z|d	 }
W n2 tyô } zd
}	t|	ƒ|‚W Y d }~n
d }~0 0 g }�z|d }t|
ƒD ]ä}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< | |¡ �q||d< W n4 t�y2 } zd'}	t|	ƒ|‚W Y d }~n
d }~0 0 |S )(Nr@   r%   s   MM *ú>ú<r   )ÚTiffImagePluginz)malformed MP Index (unreadable directory)é°  z(malformed MP Index (no number of images)i°  ZLLLHHrh   )Ú	AttributeÚSizeZ
DataOffsetZEntryNo1ZEntryNo2rà   l        i   @i    i   é   i   é   iÿÿÿ )ZDependentParentImageFlagZDependentChildImageFlagZRepresentativeImageFlagÚ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))rE   rÓ   ÚioÚBytesIOr   rD   r”   rÞ   ZImageFileDirectory_v2ÚseekÚnextrÇ   ÚdictrG   rk   rq   rO   Úunpack_fromÚzipr‹   ÚgetrC   )r   rW   Úfile_contentsÚheadZ
endiannessrÞ   rE   r@   r³   rs   ZquantZ	mpentriesZrawmpentriesZentrynumZunpackedentryÚlabelsZmpentryZmpentryattrZ	mptypemapr   r   r   rÕ     sr    



  ÿ
ú
ù	 rÕ   r[   r\   r‘   r°   )Ú1r[   r\   ZRGBXr]   r°   )@r   r   r"   r1   r8   r    râ   é   r   r:   r$   rd   rh   é   é   é*   rZ   r%   r;   é   é   é   é)   é+   é	   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   zImage.Image)rÈ   r   c                 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   r:   éÿÿÿÿr   r   rZ   r   )r±   r   rl   rr   Ú	samplingsrð   )rÈ   Zsamplingr   r   r   Úget_sampling†  s    6r%  z	IO[bytes]zstr | bytes)rÈ   r   rÀ   r   c                 C  s¢  | j dks| jdkr d}t|ƒ‚zt| j }W n< tyj } z$d| j› d�}t|ƒ|‚W Y d }~n
d }~0 0 | j}dd„ | dd¡D ƒ}| d	d
¡}| dd
¡}	| d¡}
|dkrÀd
}d}	d}
n„|t	v rìt	| }d
}| dd
¡}	| d¡}
nXt
|tƒ�sd}t|ƒ‚n>|	t	v �r t	|	  dd
¡}	t
|
tƒ�rD|
t	v �rDt	|
  d¡}
|	dk�rTd}	nZ|	dk�rdd}	nJ|	dk�rtd}	n:|	dk�r„d}	n*|	dk�r®| jdk�r¦d}t|ƒ‚t| ƒ}	dddœdd„}|
dk�rì| jdk�ràd}t|ƒ‚t| dd ƒ}
||
ƒ}
| dd¡}d}| d ¡ }�rbd!}|| }t|ƒ|k�r:d"}t|ƒ‚td| t|ƒ ƒ}|d#| d$ | 7 }| d%¡ }�rþd&}|| }g }|�rª| |d |… ¡ ||d … }�q‚d}|D ]J}td| t|ƒ ƒ}|d'| d( t|ƒ tt|ƒƒ | 7 }|d7 }�q²| d)| j d)¡¡}| d*d+¡�p*| d,d+¡}| d-d+¡}| d.d¡}t
|tjƒ�rZ| ¡ }t|ƒ|k�rtd/}t|ƒ‚||| d0d¡|| d1d+¡| d2d¡||	| d3d¡| d4d¡|
|||f| _|�sÊ|�r`| jd5k�rðd6| jd  | jd  }nB|d7k�s|d
k�rd| jd  | jd  }n| jd | jd  }|�rH|t|ƒd8 7 }|�rz|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   rf   ¡  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 JPEGzKstr | tuple[list[int], ...] | list[list[int]] | dict[int, list[int]] | Nonezlist[list[int]] | None)r*  r   c                   st  ˆd u rˆS t ˆtƒr~zdd„ ˆ ¡ D ƒ‰ W n2 ty^ } zd}t|ƒ|‚W Y d }~n(d }~0 0 ‡ fdd„tdtˆ ƒdƒD ƒ‰t ˆtttfƒ�rpt ˆtƒr¶‡fdd„ttˆƒƒD ƒ‰nt ˆtƒrÈtˆƒ‰dtˆƒ  k ràdk sîn d	}t|ƒ‚t	ˆƒD ]t\}}z*t|ƒdk�rd}t
|ƒ‚t d
|¡}W n4 t
�y\ } zd}t|ƒ|‚W Y d }~qöd }~0 0 t|ƒˆ|< qöˆS d S )Nc                 S  s.   g | ]&}|  d d¡d   ¡ D ]}t|ƒ‘qqS )ú#r   r   )rK   r   )r)   ÚlineÚnumr   r   r   rf   Ò  s   þz3_save.<locals>.validate_qtables.<locals>.<listcomp>zInvalid quantization tablec                   s   g | ]}ˆ ||d  … ‘qS )rw   r   )r)   rR   )Úlinesr   r   rf   Û  r,   r   rw   c                   s   g | ]}|ˆ v rˆ | ‘qS r   r   )r)   Úkey)r*  r   r   rf   Þ  s   r"   z$None or too many quantization tablesry   )r±   rŸ   Ú
splitlinesrÅ   rq   ro   rH   Úlistrí   Ú	enumeraterÐ   r|   )r*  r³   rs   ÚidxÚtableZtable_arrayr   )r.  r*  r   Úvalidate_qtablesÉ  s@    
þ
 


ÿ
 z_save.<locals>.validate_qtablesÚextrar,   r‰   r4   r÷   zXMP data is too longs   ÿár2   rg   r8   s   ÿâr6   rX   rb   Frc   Úoptimizer0   zEXIF data is too longZsmoothZkeep_rgbZ
streamtypeZrestart_marker_blocksZrestart_marker_rowsr]   r:   é_   r"   r’   )ÚwidthÚheightrÅ   ÚRAWMODEr–   rÓ   rÄ   Zencoderinforð   r   r±   r   rŸ   rÙ   r%  r¡   ro   Úo16rC   r
   rE   r   ZExifÚtobytesZencoderconfigrV   Úmaxr   Ú_saver—   )rÈ   r   rÀ   rs   r�   r³   rE   r'   r(  r)  r*  Úpresetr5  r6  ZMAX_BYTES_IN_MARKERr4   Zoverhead_lenZmax_data_bytes_in_markerrV   rg   Úmarkersrt   r   rX   rb   r7  r0   Úbufsizer   r   r   r?  ”  sò     







*
ÿþý
üûÿ




òÿr?  c                 C  s@   |   ¡ }t dd||g¡ zt |¡ W n ty:   Y n0 d S )NZcjpegr¹   )Ú_dumprÁ   rÂ   r¼   rÃ   rÄ   )rÈ   r   rÀ   rº   r   r   r   Ú_save_cjpegW  s    rD  zstr | bytes | NonezJpegImageFile | MpoImageFile)r   rÀ   r   c              	   C  s¢   t | |ƒ}zb| ¡ }|d urj|d dkrj|jD ]"\}}|dkr.d|v r.|  W S q.ddlm} | ||¡}W n0 ttfy‚   Y n tyœ   t	 
d¡ Y n0 |S )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Õ   rB   ÚMpoImagePluginr   ZadoptrÐ   rQ   rk   ÚwarningsÚwarn)r   rÀ   rÈ   ZmpheaderÚsegmentÚcontentr   r   r   r   Újpeg_factoryc  s     
ÿ
rJ  )z.jfifz.jpez.jpgz.jpegz
image/jpeg)N)6Ú
__future__r   r|   ré   rÑ   r¼   rO   rÁ   r}   rº   rF  Útypingr   r   r”   r   r   Ú_binaryr   r   r	   rN   r
   r   r<  Z
_deprecater   ZJpegPresetsr   ÚTYPE_CHECKINGrE  r   r   r   rY   rv   r„   r•   r�   r   rÌ   rÕ   r;  r€   r$  r%  r?  rD  rJ  Zregister_openrÙ   Zregister_saveZregister_extensionsZregister_mimer   r   r   r   Ú<module>"   sè   j0ÁC	 EPú
ý D ÿ