a
    çÝEb+o  ã                A   @   sÔ  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mZ ddlmZ ddlmZ ddlmZ ddlmZ dd	„ Zd
d„ Zdd„ Zdd„ Z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%d&efd'd(efd)d*efd+d,efd-d.efd/d0efd1d2d3d4d5d6d7d8d9d:d;d<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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dfdgdhdidjdkdldmdndodpdqdrdsddtefduœ?Zdvdw„ ZG dxdy„ dyejƒZdzd{„ Zd|d}„ Zd~d~ddd€d�d‚œZdƒZ d dd„d…œZ!d†d‡„ Z"dˆd‰„ Z#dŠd‹„ Z$dŒd�„ Z%d’dŽd�„Z&e
 'ej(e&e¡ e
 )ej(e$¡ e
 *ej(g d�¢¡ e
 +ej(d‘¡ dS )“é    Né   )ÚImageÚ	ImageFileÚTiffImagePlugin)Úi16be)Úi32be)Úo8)Úpresetsc                 C   s&   t | j d¡ƒd }t | j|¡ d S )Né   )Úi16ÚfpÚreadr   Ú
_safe_read)ÚselfÚmarkerÚn© r   úS/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/PIL/JpegImagePlugin.pyÚSkip6   s    r   c                 C   sî  t | j d¡ƒd }t | j|¡}d|d@  }|| j|< | j ||f¡ |dkrâ|d d… dkrât |dƒ | jd< }t	|d	ƒ| jd
< z |d }t |dƒt |dƒf}W n t
y¶   Y n(0 |dkrÊ|| jd< || jd< || jd< �nH|dk�r|d d… dk�rd| jv�r*|| jd< �n|dk�rB|d d… dk�rB|| jd< �nè|dk�rn|d d… dk�rn| j |¡ �n¼|dk�rŠ|d d… dk�rŠd}| j di ¡}	|||d … dk�r*z´|d7 }t ||ƒ}
|d7 }|| }|d| 7 }||d@ 7 }t||ƒ}|d7 }|||| … }|
dk�rHt|d ƒd! t |dƒt|dƒd! t |dƒd"œ}||	|
< ||7 }||d@ 7 }W n tj�y‚   Y �q*Y n0 �qœn |d#k�rä|d d… d$k�rät |dƒ| jd%< z|d& }W n t�yÖ   Y n0 || jd'< nF|dk�r*|d d… d(k�r*|dd … | jd)< | j ¡ | d | jd*< d| jv�rêd| jv �rêz~|  ¡ }|d+ }|d, }zt|d  ƒ|d  }W n t�yŒ   |}Y n0 t |¡�ržt‚|d-k�r°|d.9 }||f| jd< W n( tttttf�yè   d/| jd< Y n0 d S )0Nr
   zAPP%dé   éàÿ  é   s   JFIFé   Zjfifé   Zjfif_versioné   é   é
   r   ÚdpiÚ	jfif_unitÚjfif_densityéáÿ  s   Exif Úexiféâÿ  s   FPXR Zflashpixé   ó   ICC_PROFILE éíÿ  é   s   Photoshop 3.0 Ú	photoshops   8BIMií  r   i   )ZXResolutionZDisplayedUnitsXZYResolutionZDisplayedUnitsYéîÿ  s   AdobeÚadobeé   Úadobe_transforms   MPF ÚmpZmpoffseti(  i  é   gR¸…ëQ@)éH   r.   )r   r   r   r   r   ÚappÚapplistÚappendÚinfoÚdivmodÚ	ExceptionÚicclistÚ
setdefaultÚi32ÚstructÚerrorÚ
IndexErrorÚtellÚgetexifÚfloatÚ	TypeErrorÚmathÚisnanÚ
ValueErrorÚKeyErrorÚSyntaxErrorÚZeroDivisionError)r   r   r   Úsr/   Úversionr   r   Úoffsetr'   ÚcodeZname_lenÚsizeÚdatar+   r!   Zresolution_unitZx_resolutionr   r   r   r   ÚAPP;   s–    





ü

rK   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   r2   r/   r0   r1   )r   r   r   rE   r   r   r   rM   ³   s
    

rM   c           	      C   s”  t | j d¡ƒd }t | j|¡}t |dƒt |dƒf| _|d | _| jdkr^td| j› d�ƒ‚|d | _| jdkrzd	| _	n6| jdkrŒd
| _	n$| jdkržd| _	ntd| j› d�ƒ‚|dv rÌd | j
d< | j
d< | j�r<| j ¡  | jd d t| jƒk�r(g }| jD ]}| |dd … ¡ �qd |¡}nd }|| j
d< g | _tdt|ƒdƒD ]B}|||d … }| j |d |d d |d d@ |d f¡ �qLd S )Nr
   r-   r   r   r   zcannot handle z-bit layersr   ÚLÚRGBr   ÚCMYKz-layer images)éÂÿ  éÆÿ  éÊÿ  éÎÿ  ÚprogressiveÚprogressioné   r&   ó    Úicc_profileé   é   r   )r   r   r   r   r   Ú_sizeÚbitsrC   ÚlayersÚmoder2   r5   ÚsortÚlenr1   ÚjoinÚrangeÚlayer)	r   r   r   rE   ZprofileÚprY   ÚiÚtr   r   r   ÚSOF¾   s:    








rh   c                    sÎ   t | j d¡ƒd }t | j|¡}t|ƒrÊ|d }|d dkrBdnd}d|d  }t|ƒ|k rftdƒ‚t |dkrvdnd|d|… ¡‰ tj	d	kr |dkr ˆ  
¡  ‡ fd
d„tD ƒ| j|d@ < ||d … }q"d S )Nr
   r   r[   r   é@   zbad quantization table markerÚBÚHÚlittlec                    s   g | ]}ˆ | ‘qS r   r   )Ú.0rf   ©rJ   r   r   Ú
<listcomp>  rX   zDQT.<locals>.<listcomp>r   )r   r   r   r   r   ra   rC   ÚarrayÚsysÚ	byteorderÚbyteswapÚzigzag_indexÚquantization)r   r   r   rE   ÚvÚ	precisionZ	qt_lengthr   rn   r   ÚDQTî   s     rx   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Áÿ  rQ   iÃÿ  iÄÿ  iÅÿ  rR   iÇÿ  iÈÿ  iÉÿ  rS   iËÿ  iÌÿ  iÍÿ  rT   iÏÿ  iÐÿ  iÑÿ  iÒÿ  iÓÿ  iÔÿ  iÕÿ  iÖÿ  i×ÿ  iØÿ  iÙÿ  éÚÿ  iÛÿ  iÜÿ  iÝÿ  iÞÿ  ißÿ  r   r    r"   iãÿ  iäÿ  iåÿ  iæÿ  içÿ  ièÿ  iéÿ  iêÿ  iëÿ  iìÿ  r%   r(   iïÿ  iðÿ  iñÿ  iòÿ  ióÿ  iôÿ  iõÿ  iöÿ  i÷ÿ  iøÿ  iùÿ  iúÿ  iûÿ  iüÿ  éýÿ  iþÿ  c                 C   s   | dd… dkS )Nr   r-   s   ÿØÿr   )Úprefixr   r   r   Ú_acceptK  s    r   c                   @   sL   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚJpegImageFileÚJPEGzJPEG (ISO 10918)c                 C   s>  | j  d¡}t|ƒstdƒ‚d}d | _| _g | _i | _i | _i | _	i | _
g | _g | _|d }|dkr€|| j  d¡ }t|ƒ}n| j  d¡}qV|tv rþt| \}}}|d ur¶|| |ƒ |dkrð| j}| jdkrÒd	}d
d| j d|dffg| _�q:| j  d¡}qV|dk�s|dk�rd}qV|dk�r0| j  d¡}qVtdƒ‚qVd S )Nr-   znot a JPEG fileó   ÿr   éÿ   r   r|   rP   úCMYK;IÚjpeg©r   r   Ú iÿÿ  i ÿ  zno marker found)r   r   r   rC   r]   r^   rd   Z
huffman_dcZ
huffman_acru   r/   r0   r5   r   ÚMARKERr_   rI   Útile)r   rE   rf   ÚnameÚdescriptionÚhandlerÚrawmoder   r   r   Ú_openY  sD    



zJpegImageFile._openc                 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   Ú
read_bytesrE   r   r   r   Ú	load_readŒ  s
    zJpegImageFile.load_readc                 C   sb  t | jƒdkrd S | jrd S | jd \}}}}d}| j}|d dkrZ|dv rZ|| _|df}|�r"t| jd |d  | jd |d  ƒ}dD ]}	||	krŠ qœqŠ|d |d |d |d  |	 d |	 |d  |d |d  |	 d |	 |d  f}| jd |	 d |	 | jd |	 d |	 f| _|	}||||fg| _|df| _dd|d | |d | f}
| j|
fS )	Nr   r   rO   )rN   ÚYCbCrr‡   )r   r   r
   r   r
   r-   )ra   r‰   ZdecoderconfigrI   r_   Úminr\   )r   r_   rI   ÚdÚeÚoÚaÚscaleZoriginal_sizerE   Úboxr   r   r   Údraftœ  s4    &""ü.
zJpegImageFile.draftc                 C   sæ   t  ¡ \}}t |¡ tj | j¡r:t dd|| jg¡ nt	dƒ‚z`t
 |¡� }| ¡  |j| _W d   ƒ n1 st0    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_callrA   r   ÚopenÚloadÚimÚunlinkÚOSErrorr_   rI   r\   r‰   )r   Úfr¡   Z_imr   r   r   Ú
load_djpegÁ  s(    
(ý

zJpegImageFile.load_djpegc                 C   s   t | ƒS ©N)Ú_getexif©r   r   r   r   r®   Û  s    zJpegImageFile._getexifc                 C   s   t | ƒS r­   )Ú_getmpr¯   r   r   r   r°   Þ  s    zJpegImageFile._getmpc                 C   sB   | j D ]6\}}|dkr| dd¡\}}|dkr|  |¡  S qi S )z˜
        Returns a dictionary containing the XMP tags.
        Requires defusedxml to be installed.
        :returns: XMP tags in a dictionary.
        rz   ó    r   s   http://ns.adobe.com/xap/1.0/)r0   ÚrsplitZ_getxmp)r   ÚsegmentÚcontentr   Zxmp_tagsr   r   r   Úgetxmpá  s    zJpegImageFile.getxmpN)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionrŽ   r’   r›   r¬   r®   r°   rµ   r   r   r   r   r€   T  s   3%r€   c                 C   s   d| j vrd S |  ¡  ¡ S )Nr!   )r2   r<   Z_get_merged_dictr¯   r   r   r   r®   ð  s    
r®   c              
   C   s$  z| j d }W n ty"   Y d S 0 t |¡}| d¡}|d d… dkrLdnd}z,t |¡}| |j¡ | 	|¡ t
|ƒ}W n. tyª } ztdƒ|‚W Y d }~n
d }~0 0 z|d }W n. tyæ } ztd	ƒ|‚W Y d }~n
d }~0 0 g }	�z |d
 }
td|ƒ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tdƒ‚ddddd d!d"d#œ}| |d$ d%¡|d$< ||d< |	 |¡ �q|	|d
< W n0 t�y } ztd&ƒ|‚W Y d }~n
d }~0 0 |S )'Nr,   r   r   s   MM *ú>ú<z)malformed MP Index (unreadable directory)é°  z(malformed MP Index (no number of images)i°  r   ZLLLHHr[   )Ú	AttributeÚSizeZ
DataOffsetZEntryNo1ZEntryNo2r¾   l        i   @i    i   é   i   é   iÿÿÿ )ZDependentParentImageFlagZDependentChildImageFlagZRepresentativeImageFlagÚReservedÚImageDataFormatÚMPTyperÃ   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))r2   rB   ÚioÚBytesIOr   r   ZImageFileDirectory_v2ÚseekÚnextr§   Údictr4   rC   rc   r8   Úunpack_fromÚzipÚboolÚgetr1   )r   rJ   Úfile_contentsÚheadZ
endiannessr2   r,   r–   ZquantZ	mpentriesZrawmpentriesZentrynumZunpackedentryÚlabelsZmpentryZmpentryattrZ	mptypemapr   r   r   r°   ö  sh    



  ÿ
ú
ù	 r°   rN   rO   r„   r“   )Ú1rN   rO   ZRGBXrP   r“   )@r   r   r   rZ   r&   r   rÀ   é   r
   r   r   rW   r[   é   é   é*   r-   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   c                 C   s   t  dt¡ | S )Nzpconvert_dict_qtables is deprecated and will be removed in Pillow 10(2023-07-01). Conversion is no longer needed.)ÚwarningsÚwarnÚDeprecationWarning©Úqtablesr   r   r   Úconvert_dict_qtables\  s
    ýr  c                 C   sZ   t | dƒr| jdv rdS | jd dd… | jd dd…  | jd dd…  }t |d¡S )Nr^   )r   r   éÿÿÿÿr   r   r-   r
   )r�   r^   rd   Ú	samplingsrÏ   )r¨   Zsamplingr   r   r   Úget_samplinge  s    6r
  c                 C   s˜  zt | j }W n8 tyF } z td| j› d�ƒ|‚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¡}	nPt|tƒsÜt	dƒ‚n<|tv rôt|  d	d¡}t|	t
ƒ�r|	tv �rt|	  d¡}	|dk�r(d}nV|dk�r8d}nF|dk�rHd}n6|dk�rXd}n&|dk�r~| jdk�rvt	dƒ‚t| ƒ}dd„ }|	dk�r°| jdk�r¤t	dƒ‚t| dd ƒ}	||	ƒ}	d}| d¡}|�r`d}d}|| }g }|�r| |d |… ¡ ||d … }�qàd}|D ]N}t dd| t|ƒ ¡}|d| d t|ƒ tt|ƒƒ | 7 }|d7 }�q| d d!¡�px| d"d!¡}| d#d!¡}| d$d¡}t|tjƒ�r¨| ¡ }||| d%d¡|| d&d¡|d |d ||	||f| _d}|�sì|�rT| jd'k�rd(| jd  | jd  }nB|d)k�s&|dk�r@d| jd  | jd  }n| jd | jd  }ttj|t|ƒd* t|ƒd ƒ}t | |d+d| j d|fg|¡ d S ),Nzcannot write mode z as JPEGc                 S   s   g | ]}t |ƒ‘qS r   )Úround)rm   Úxr   r   r   ro   |  rX   z_save.<locals>.<listcomp>r   r†   Úqualityr  Úsubsamplingr  Zkeepru   zInvalid quality settingz4:4:4r   z4:2:2r   z4:2:0r
   z4:1:1r�   z3Cannot use 'keep' when original image is not a JPEGc                    s`  ˆd u rˆS t ˆtƒrzzdd„ ˆ ¡ D ƒ‰ W n. tyZ } ztdƒ|‚W Y d }~n(d }~0 0 ‡ fdd„tdtˆ ƒdƒD ƒ‰t ˆtttfƒ�r\t ˆtƒr²‡fdd„ttˆƒƒD ƒ‰nt ˆtƒrÄtˆƒ‰dtˆƒ  k rÜdk sæn td	ƒ‚t	ˆƒD ]h\}}z"t|ƒdk�r
t
‚t d
|¡}W n0 t
�yH } ztdƒ|‚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   )ÚsplitÚint)rm   ÚlineÚnumr   r   r   ro   §  s   þz3_save.<locals>.validate_qtables.<locals>.<listcomp>zInvalid quantization tablec                    s   g | ]}ˆ ||d  … ‘qS )ri   r   )rm   rE   )Úlinesr   r   ro   ¯  rX   r   ri   c                    s   g | ]}|ˆ v rˆ | ‘qS r   r   )rm   Úkeyr  r   r   ro   ²  s   r   z$None or too many quantization tablesrk   )Ú
isinstanceÚstrÚ
splitlinesrA   rc   ra   ÚtupleÚlistrË   Ú	enumerater>   rp   )r  r–   ÚidxÚtabler   )r  r  r   Úvalidate_qtables¢  s8    
þ
 


ÿ
 z_save.<locals>.validate_qtablesrX   rY   r&   r}   z>Hs   ÿâr$   rU   FrV   Úoptimizer!   ZsmoothZ
streamtyperP   r   é_   r   r…   )ÚRAWMODEr_   rB   rª   ZencoderinforÏ   r	   r  r  rA   r  r¹   r
  Úgetattrr1   r8   Úpackra   r   r   ZExifÚtobytesZencoderconfigrI   Úmaxr   ZMAXBLOCKÚ_save)r¨   r   r£   r�   r–   r2   r   r  r  r  Úpresetr  ÚextrarY   ZICC_OVERHEAD_LENZMAX_BYTES_IN_MARKERZMAX_DATA_BYTES_IN_MARKERÚmarkersrf   r   rI   rU   r  r!   Úbufsizer   r   r   r&  s  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_cjpeg  s    r,  c              	   C   sp   t | |ƒ}z0| ¡ }|d dkr8ddlm} | ||¡}W n0 ttfyP   Y n tyj   t 	d¡ Y n0 |S )Nr½   r   )ÚMpoImageFilezTImage appears to be a malformed MPO file, it will be interpreted as a base JPEG file)
r€   r°   ZMpoImagePluginr-  Zadoptr>   r:   rC   r  r  )r   r£   r¨   Zmpheaderr-  r   r   r   Újpeg_factory  s    
ÿ
r.  )z.jfifz.jpez.jpgz.jpegz
image/jpeg)NN),rp   rÇ   r?   rŸ   r8   r¤   rq   r�   r  r‡   r   r   r   Ú_binaryr   r   r   r7   r   ZJpegPresetsr	   r   rK   rM   rh   rx   rˆ   r   r€   r®   r°   r!  rt   r	  r  r
  r&  r,  r.  Zregister_openr¹   Zregister_saveZregister_extensionsZregister_mimer   r   r   r   Ú<module>"   sÚ   x0ÁC	 Jú
ý	  
