o
    jfz                     @  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 dddZdddZdddZ dddZ!dd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dddefdddefdddefdddefdddefdddefdddefdddefdddefdddefdddefddddddddddddddddddde fdZ#dddZ$G dd dejZ%dddZ&dddZ'dddddddÜZ(dZ)d dddƜZ*dddʄZ+dddЄZ,	ddddԄ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   T/var/www/html/Deteccion_Ine/venv/lib/python3.10/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rt|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rd| 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rd }| j	d!i }	zw|||d"  d#krv|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 }|||d"  d#ksW d S W d S  tjy   Y d S w |d)kr|d*rt|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 rd | jd< | jd< | jr| j  | jd d t| jkrdd | jD }d|}nd }|| jd< g | _tdt|dD ] }|||d  }| j|d |d d |d d@ |d f qd 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	byteorderbyteswapzigzag_indexquantization)r   r   r   rP   v	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JPGZ	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 rt| \}}}|d urh|| | |dkr| j}| jd	krvd
}tdd| j d|dfg| _n | j d}n|dv rd}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] | None0tuple[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}|rt| jd |d  | jd |d  }dD ]}	||	krS nqK|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ascaleZoriginal_sizerP   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rd|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RepresentativeImageFlagReservedImageDataFormatMPTyper   r   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))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  sV  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rJd}d}	d}
n=|tv r`t| }d}|d	d}	|d}
n't|tskd}t	||	tv rwt|	 d	d}	t|
t
r|
tv rt|
 d}
|	dkrd}	n(|	dkrd}	n!|	dkrd}	n|	dkrd}	n|	dkr| jdkrd}t	|t| }	d9dd}|
dkr| jdkrd}t	|t| dd }
||
}
|dd}d}|d }r
d }|| }t||krd!}t	|td| t| }|d"| d# | 7 }|d$ }rYd%}|| }g }|r/||d |  ||d  }|sd}|D ]%}td| t| }|d&| d' t| tt| | 7 }|d7 }q3|d(| jd(}|d)d*po|d+d*}|d,d*}|d-d}t|tjr| }t||krd.}t	||||d/d||d0d*|d1d||	|d2d|d3d|
|||f| _|s|r
| jd4krd5| jd  | jd  }n!|d6ks|dkrd| jd  | jd  }n
| jd | jd  }|r|t|d7 7 }|r	|t|d 7 }ntt|d7 t|d }t| |td8d| j d|g| d S ):Nz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:4r   z4:2:2r   z4:2:0r   z4:1:1r   z3Cannot use 'keep' when original image is not a JPEGKstr | tuple[list[int], ...] | list[list[int]] | dict[int, list[int]] | Noner   list[list[int]] | Nonec              
     sP  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rt trTfddttD n	t tr]tdt  k ridk spn d	}t|z"t	D ]\}}t|dkrd}t
|ttd
||< quW S  t
y } zd}t||d }~ww 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tabler   )r2  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.  )RAWMODEr   r   r   Zencoderinfor   r
   r   r   r   r4  r   r%  getattrrp   o16rA   r   rC   r   ZExiftobytesZencoderconfigrT   maxr   _saver   )rj   r   r   r   r   rt   rC   r&   r*  r+  r,  presetr:  r;  ZMAX_BYTES_IN_MARKERr2   Zoverhead_lenZmax_data_bytes_in_markerrT   rf   markersru   r   rV   r`   r<  r.   bufsizer   r   r   rC    s   




(






rC  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_factoryV  s0   

	rN  )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   rG  r   rH  )3
__future__r   r~   r   r   r   rM   r   r   r   rJ  r   r   r   _binaryr   r   r   rL   r   r	   r@  ZJpegPresetsr
   TYPE_CHECKINGtypingr   r   rI  r   r   r   rW   rw   r   r   r   r   r   r   r>  r   r$  r%  rC  rN  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


 A