a
    ¥Q•h£r  ã                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 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
„ 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d0d1efd2d3d4d5d6d7d8d9d:d;d<d=efdd>efd?d@efdAdBefdCdDefdEdFefdGdHefdIdJefdKdLefdMdNefdOdPefdQdRefdSdTefdUdVefdWdXefdYdZefd[d\efd]d^efd_d`efdadbefdcddefdedfefdgdhdidjdkdldmdndodpdqdrdsdtdduefdvœ?Zdwdx„ ZG dydz„ dzejƒZd{d|„ 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�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)Úi16be)Úi32be)Úo8)Úo16be)Úpresetsc                 C   s&   t | j d¡ƒd }t | j|¡ d S )Né   )Úi16ÚfpÚreadr   Ú
_safe_read)ÚselfÚmarkerÚn© r   úL/var/www/sistema_ama/venv/lib/python3.9/site-packages/PIL/JpegImagePlugin.pyÚSkip7   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< �n\|dk�r,|d d… dk�r,d| jv�r>|| jd< | j ¡ | d | _�n|dk�rV|d d… dk�rV|| jd< �nè|dk�r‚|d d… dk�r‚| 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�r\t|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jtttttf�y    d0| jd< Y n0 d S )1Nr
   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   )ÚXResolutionZDisplayedUnitsXÚYResolutionZDisplayedUnitsYéîÿ  s   AdobeÚadobeé   Úadobe_transforms   MPF ÚmpZmpoffseti(  i  é   gR¸…ëQ@)éH   r1   )r   r   r   r   r   ÚappÚapplistÚappendÚinfoÚdivmodÚ	ExceptionÚtellÚ_exif_offsetÚicclistÚ
setdefaultÚi32ÚstructÚerrorÚ
IndexErrorÚgetexifÚfloatÚ	TypeErrorÚmathÚisnanÚ
ValueErrorÚKeyErrorÚSyntaxErrorÚZeroDivisionError)r   r   r   Úsr2   Úversionr   r   Úoffsetr(   ÚcodeZname_lenÚsizeÚdatar.   r!   Zresolution_unitZx_resolutionr   r   r   r   ÚAPP<   s¦    






ü

úrO   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   r5   r2   r3   r4   )r   r   r   rI   r   r   r   rQ   ½   s
    

rQ   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�rD| j ¡  | jd d t| jƒk�r0g }| 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¡ �qTd S )Nr
   r0   r   r   r   zcannot handle z-bit layersr   ÚLÚRGBr   ÚCMYKz-layer images)éÂÿ  éÆÿ  éÊÿ  éÎÿ  ÚprogressiveÚprogressioné   r'   ó    Úicc_profiler"   é   r   )r   r   r   r   r   Ú_sizeÚbitsrG   ÚlayersÚ_moder5   r:   ÚsortÚlenr4   ÚjoinÚrangeÚlayer)
r   r   r   rI   ÚmsgÚprofileÚpr]   ÚiÚtr   r   r   ÚSOFÈ   s>    








rm   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   r^   r   é@   zbad quantization table markerÚBÚHÚlittlec                    s   g | ]}ˆ | ‘qS r   r   )Ú.0rk   ©rN   r   r   Ú
<listcomp>  r\   zDQT.<locals>.<listcomp>r   )r   r   r   r   r   rd   rG   ÚarrayÚsysÚ	byteorderÚbyteswapÚzigzag_indexÚquantization)r   r   r   rI   ÚvÚ	precisionZ	qt_lengthrh   r   rs   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 progressionÚ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 13Ú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Áÿ  rU   iÃÿ  iÄÿ  iÅÿ  rV   iÇÿ  iÈÿ  iÉÿ  rW   iËÿ  iÌÿ  iÍÿ  rX   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 )Nr0   s   ÿØÿr   )Úprefixr   r   r   Ú_acceptX  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   sH  | j  d¡}t|ƒs d}t|ƒ‚d}d | _| _g | _i | _i | _i | _	i | _
g | _g | _|d }|dkr„|| j  d¡ }t|ƒ}n| j  d¡}qZ|tv �rt| \}}}|d ur¼|| |ƒ |dkrö| j}| jdkrØd	}d
d| j d|dffg| _�qD| j  d¡}qZ|dk�s|dk�rd}qZ|dk�r6| j  d¡}qZd}t|ƒ‚qZd S )Nr0   znot a JPEG fileó   ÿr   éÿ   r   rƒ   rT   úCMYK;IÚjpeg©r   r   Ú iÿÿ  i ÿ  zno marker found)r   r   r†   rG   r`   ra   rg   Z
huffman_dcZ
huffman_acrz   r2   r3   r:   r   ÚMARKERÚmoderM   Útile)r   rI   rh   rk   ÚnameÚdescriptionÚhandlerÚrawmoder   r   r   Ú_opene  sH    




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   ÚLOAD_TRUNCATED_IMAGESÚhasattrr—   )r   Ú
read_bytesrI   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   rS   )rR   ÚYCbCrrŽ   )r   r   r
   r   r
   r0   )rd   r‘   ÚdecoderconfigrM   rb   Úminr_   r�   )r   r�   rM   ÚdÚeÚoÚaÚscaleZoriginal_sizerI   Úboxr   r   r   Údraft¨  s4    &""ü.
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ÚOSErrorrE   r   ÚopenÚloadÚimr�   rb   rM   r_   r‘   )r   Úfr«   rh   Z_imr   r   r   Ú
load_djpegÌ  s2    
(ý

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   sH   | j D ]<\}}|dkr| d¡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.
        r€   ó    Nr
   s   http://ns.adobe.com/xap/1.0/)r3   ÚsplitÚ_getxmp)r   ÚsegmentÚcontentr   Ú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‡   a  s   3$r‡   c                 C   s   d| j vrd S |  ¡  ¡ S )Nr!   )r5   r@   Ú_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}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|
ƒ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�y: } zd(}	t|	ƒ|‚W Y d }~n
d }~0 0 |S ))Nr/   r   r   s   MM *ú>ú<r   )ÚTiffImagePluginz)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 MPOZ	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))r5   rF   ÚioÚBytesIOr   rŽ   rÊ   ÚImageFileDirectory_v2ÚseekÚnextr³   Údictr7   rG   rf   r=   Úunpack_fromÚzipÚboolÚgetr4   )r   rN   Úfile_contentsÚheadZ
endiannessrÊ   r5   r/   r    rh   ÚquantZ	mpentriesZrawmpentriesZentrynumZunpackedentryÚlabelsZmpentryZmpentryattrZ	mptypemapr   r   r   rº     sr    



  ÿ
ú
ù	 rº   rR   rS   r‹   rœ   )Ú1rR   rS   ÚRGBXrT   rœ   )@r   r   r   r"   r'   r   rÎ   é   r
   r   r   r[   r^   é   é   é*   r0   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   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 )Nra   )r   r   éÿÿÿÿr   r   r0   r
   )r™   ra   rg   Ú	samplingsrÝ   )r´   Zsamplingr   r   r   Úget_samplings  s    6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k�rä| jdk�rØd}t|ƒ‚t| dd ƒ}
||
ƒ}
| dd¡}d}| d¡}|�r˜d}|| }g }|�rD| |d |… ¡ ||d … }�qd}|D ]J}td| t|ƒ ƒ}|d| d  t|ƒ tt|ƒƒ | 7 }|d7 }�qL| d!| j d!¡¡}| d"d#¡�pÄ| d$d#¡}| d%d#¡}| d&d¡}t
|tjƒ�rô| ¡ }t|ƒ|k�rd'}t|ƒ‚||| d(d¡|| d)d¡|d |d |	|
|||f| _d}|�sT|�rê| jd*k�rzd+| jd  | jd  }nB|d,k�sŽ|d
k�r¨d| jd  | jd  }n| jd | jd  }|�rÒ|t|ƒd- 7 }|�r|t|ƒd 7 }nt|t|ƒd- t|ƒd ƒ}t | |d.d| j d|f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)rr   Úxr   r   r   rt   Ž  r\   z_save.<locals>.<listcomp>r   r�   Úqualityr  ÚsubsamplingÚqtablesÚkeeprz   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 JPEGc                    sl  ˆ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ƒ�rht ˆ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 ]l\}}z"t|ƒdk�rt
‚t d
|¡}W n4 t
�yT } 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   )r¼   Úint)rr   ÚlineÚnumr   r   r   rt   »  s   þz3_save.<locals>.validate_qtables.<locals>.<listcomp>zInvalid quantization tablec                    s   g | ]}ˆ ||d  … ‘qS )rn   r   )rr   rI   )Úlinesr   r   rt   Ä  r\   r   rn   c                    s   g | ]}|ˆ v rˆ | ‘qS r   r   )rr   Úkey)r  r   r   rt   Ç  s   r   z$None or too many quantization tablesrp   )Ú
isinstanceÚstrÚ
splitlinesrE   rf   rd   ÚtupleÚlistrÙ   Ú	enumeraterB   ru   )r  r    rh   ÚidxÚtabler   )r  r  r   Úvalidate_qtables¶  s>    
þ
 


ÿ
 z_save.<locals>.validate_qtablesÚextrar\   r„   r]   r'   s   ÿâr%   rP   rY   FrZ   Úoptimizer!   zEXIF data is too longÚsmoothZ
streamtyperT   r   é_   r   rŒ   )ÚwidthÚheightrE   ÚRAWMODEr�   rF   r±   ÚencoderinforÝ   r	   r!  r  r"  rÅ   r  Úgetattrr4   Úo16rd   r   r5   r   ÚExifÚtobytesÚencoderconfigrM   Úmaxr   Ú_save)r´   r   r­   rh   r•   r    r5   r   r  r  r  Úpresetr)  r*  ZMAX_BYTES_IN_MARKERr]   ZICC_OVERHEAD_LENZMAX_DATA_BYTES_IN_MARKERÚmarkersrk   r   rM   rP   rY   r+  r!   Úbufsizer   r   r   r8  �  sÞ     







%

ÿþý
üûÿ

ôr8  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_cjpeg4  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º   ÚMpoImagePluginr>  ZadoptrB   r?   rG   ÚwarningsÚwarn)r   r­   r´   Zmpheaderr>  r   r   r   Újpeg_factory@  s    
ÿ
rB  )z.jfifz.jpez.jpgz.jpegz
image/jpeg)NN),ru   rÔ   rC   r©   r=   r®   rv   r§   r@  rŽ   r   r   Ú_binaryr   r   r   r<   r   r   r3  ZJpegPresetsr	   r   rO   rQ   rm   r}   r�   r†   r‡   r¸   rº   r0  ry   r  r  r8  r=  rB  Úregister_openrÅ   Úregister_saveÚregister_extensionsÚregister_mimer   r   r   r   Ú<module>"   sÜ    2ÁC	 !Pú
ý 4
