o
    Zht                     @  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 dddZd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-d.d/efd0d1d2efd3d4d5d6d7efd8d9d:efd;d<d=efd>d?d@efdAdBdCefdDdEdFefdGdHdIefdJdKi dLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`efdaddbefdcdddeefdfdgdhefdidjdkefdldmdnefdodpdqefdrdsdtefi dudvdwefdxdydzefd{d|d}efd~dde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#dd Z$dddddddZ%dZ&d dddĜZ'ddƄ Z(ddd΄Z)dddЄZ*ddd҄Z+e,e"j-e+e! e.e"j-e) e/e"j-g dӢ e0e"j-dԡ dS )    )annotationsN)IOAny   )Image	ImageFile)i16be)i32be)o8)o16be)presetsselfJpegImageFilemarkerintreturnNonec                 C  s&   t | jdd }t| j| d S )N   )i16fpreadr   
_safe_read)r   r   n r   J/var/www/html/lang_env/lib/python3.10/site-packages/PIL/JpegImagePlugin.pySkip:   s   r   c                 C  s  t | jdd }t| j|}d|d@  }|| j|< | j||f |dkrr|d d dkrrt |d | jd< }t	|d	| jd
< z|d }t |dt |df}W n
 t
y\   Y d S w |dkrf|| jd< || jd< || jd< d S |dkr|d d dkrd| jv r| jd  |dd  7  < d S || jd< | j | d | _d S |dkr|d d dkr|ddd | jd< d S |dkr|d d dkr|| jd< d S |dkr|d d dkr| j| d S |dkr{|d d  d!kr{d }| jd"i }	|||d  d#kryzZ|d7 }t ||}
|d7 }|| }|d| 7 }||d@ 7 }t||}|d7 }||||  }|
d$krPt|d%d& t |dt|dd& t |dd'}||	|
< ||7 }||d@ 7 }W n tjyk   Y d S w |||d  d#ksd S d S |d(kr|d d d)krt |d| jd*< z|d+ }W n ty   Y d S w || jd,< d S |dkr|d d d-kr|dd  | jd.< | j | d | jd/< d S d S d S )0Nr   zAPP%d        s   JFIF   Zjfif   Zjfif_version      
   r   dpi	jfif_unitjfif_density     s   Exif  exif   s   http://ns.adobe.com/xap/1.0/     Zxmp  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mpoffset)r   r   r   r   r   appapplistappendinfodivmod	ExceptiontellZ_exif_offsetspliticclist
setdefaulti32structerror
IndexError)r   r   r   sr7   versionr%   r&   offsetr1   codeZname_lensizedatar5   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   r:   r7   r8   r9   )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r1d| j d}t||d | _| jdkr?d	| _	n| jdkrHd
| _	n| jdkrQd| _	nd| j d}t||dv rjd | 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RGBr   CMYKz-layer images)        progressiveprogression   c                 S  s   g | ]}|d d qS )r0   Nr   ).0pr   r   r   
<listcomp>   s    zSOF.<locals>.<listcomp>    icc_profiler(      r   )r   r   r   r   r   _sizebitsSyntaxErrorlayers_moder:   r?   sortlenjoinrangelayerr9   )	r   r   r   rE   msgZprofiler]   itr   r   r   SOF   s<   







.rl   c                   s   t | jdd }t| j|}t|rl|d }|d dkr!dnd}d|d  }t||k r5d}t|t|dkr=dnd|d|  tj	d	krR|dkrR 
   fd
dtD | j|d@ < ||d  }t|sd S d S )Nr   r   r^   r   @   zbad quantization table markerBHlittlec                   s   g | ]} | qS r   r   )rY   rj   rJ   r   r   r[          zDQT.<locals>.<listcomp>r   )r   r   r   r   r   re   ra   arraysys	byteorderbyteswapzigzag_indexquantization)r   r   r   rE   v	precisionZ	qt_lengthri   r   rq   r   DQT   s    r{   i  ZSOF0zBaseline DCTi  ZSOF1zExtended Sequential DCTrR   ZSOF2zProgressive DCTi  ZSOF3zSpatial losslessi  ZDHTzDefine Huffman tablei  ZSOF5zDifferential sequential DCTrS   ZSOF6zDifferential progressive DCTi  ZSOF7zDifferential spatiali  )ZJPGZ	ExtensionNi  ZSOF9zExtended sequential DCT (AC)rT   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)rU   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 1r,   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 12r/   ZAPP13zApplication segment 13r2   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 d dkS )NrN   s   r   )r   r   r   r   _accept>  s   r   c                   @  sV   e Zd ZdZdZ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 ZdS )!r   JPEGzJPEG (ISO 10918)c                 C  s@  | j d}t|sd}t|d}d | _| _g | _i | _i | _i | _	i | _
g | _g | _	 |d }|dkrC|| j d }t|}n| j d}q-|tv rt| \}}}|d ur^|| | |dkrz| j}| jd	krld
}dd| j d|dffg| _n | j d}n|dv rd}n|dkr| j d}nd}t|q.|   d S )NrN   znot a JPEG file   r   T   r   r|   rQ   CMYK;Ijpegr   r    >   r   i  i   zno marker found)r   r   r   ra   r`   rb   rh   Z
huffman_dcZ
huffman_acrx   r7   r8   r?   r   MARKERmoderI   tile_read_dpi_from_exif)r   rE   ri   rj   namedescriptionhandlerrawmoder   r   r   _openK  sN   


zJpegImageFile._open
read_bytesr   r   r   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   rE   r   r   r   	load_read  s
   zJpegImageFile.load_readr   
str | NonerI   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}|d dkr-|dv r-|| _|df}|rt| jd |d  | jd |d  }dD ]}	||	krL nqD|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   rP   )rO   YCbCrr   )r"   r   r   r   r   rN   )re   r   ZdecoderconfigrI   rc   minr_   r   )r   r   rI   deoascaleZoriginal_sizerE   boxr   r   r   draft  s6   &"".

zJpegImageFile.draftr   c                 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djpeg-outfilezInvalid Filename)tempfilemkstemposclosepathexistsfilename
subprocess
check_callunlinkOSError
ValueErrorr   openloadimr   rc   rI   r_   r   )r   fr   ri   Z_imr   r   r   
load_djpeg  s<   




zJpegImageFile.load_djpegdict[str, Any] | Nonec                 C     t | S N)_getexifr   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 numberrN   gRQ@)H   r   )r:   getexiffloat	TypeErrormathisnanr   rB   rC   KeyErrorra   ZeroDivisionError)r   r)   Zresolution_unitZx_resolutionr$   ri   r   r   r   r     s6   

z!JpegImageFile._read_dpi_from_exifc                 C  r   r   )_getmpr   r   r   r   r     r   zJpegImageFile._getmpN)r   r   r   r   )r   r   rI   r   r   r   )r   r   r   r   )__name__
__module____qualname__formatformat_descriptionr   r   r   r   r   r   r   r   r   r   r   r   G  s    
5

&

r   c                 C  s   d| j vrd S |   S )Nr)   )r:   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 d dkr&dnd}ddlm} z||}||j	 |
| t|}W n tyW } zd	}	t|	|d }~ww z|d
 }
W n tyq } zd}	t|	|d }~ww g }z|d }td|
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< || q~||d< W |S  ty	 } zd(}	t|	|d }~ww ))Nr6   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 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))r:   r   ioBytesIOr   r   r   ZImageFileDirectory_v2seeknextr   dictr<   ra   rg   rB   unpack_fromzipr   getr9   )r   rJ   file_contentsheadZ
endiannessr   r:   r6   r   ri   ZquantZ	mpentriesZrawmpentriesZentrynumZunpackedentrylabelsZmpentryZmpentryattrZ	mptypemapr   r   r   r     s   







	

r   rO   rP   r   r   )1rO   rP   ZRGBXrQ   r   )@r   r   r   r(   r0   r   r      r   r   r!   rX   r^      r*   *   rN   r"   r-            )   +   	   r4      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 )Nrb   )r   r   r   r   rN   r   )r   rb   rh   	samplingsr   )r   Zsamplingr   r   r   get_samplingk  s   6r  r   Image.Imager   	IO[bytes]r   str | bytesc                 C  s"  | 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 rt	|	 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| }	dd }|
dkr| jdkrd}t|t| dd }
||
}
|dd}d}|d}|r9d}|| }g }|r||d |  ||d  }|sd}|D ]%}td| t| }|d| d  t| tt| | 7 }|d7 }q|d!| jd!}|d"d#pO|d$d#}|d%d#}|d&d}t
|tjrg| }t||krtd'}t||||d(d||d)d#|d*d|d |d |	|d+d|d,d|
|||f| _d}|s|r| jd-krd.| jd  | jd  }n!|d/ks|d
krd| jd  | jd  }n
| jd | jd  }|r|t|d0 7 }|r|t|d 7 }nt|t|d0 t|d }t| |d1d| j d|fg| d S )2Nr   z cannot write empty image as JPEGzcannot write mode z as JPEGc                 S  s   g | ]}t |qS r   )round)rY   xr   r   r   r[     rr   z_save.<locals>.<listcomp>r$   r   qualityr  subsamplingqtablesZkeeprx   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                   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rt 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rd}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   )r>   r   )rY   linenumr   r   r   r[     s    z3_save.<locals>.validate_qtables.<locals>.<listcomp>zInvalid quantization tablec                   s   g | ]
} ||d   qS )rm   r   )rY   rE   )linesr   r   r[     s    r   rm   c                   s   g | ]
}| v r | qS r   r   )rY   key)r  r   r   r[     s    r   z$None or too many quantization tablesro   )
isinstancestr
splitlinesr   rg   re   tuplelistr   	enumerater   rs   )r  r   ri   idxtabler   )r  r  r   validate_qtables  sJ   







z_save.<locals>.validate_qtablesextrar\   r   r]   r0   s   r.   rL   rV   FrW   optimizer)   zEXIF data is too longZsmoothZkeep_rgbZ
streamtypeZrestart_marker_blocksZrestart_marker_rowsrQ   r   _   r   r   )widthheightr   RAWMODEr   r   r   Zencoderinfor   r   r!  r   r"  r   r  getattrr9   o16re   r
   r:   r   ZExiftobytesZencoderconfigrI   maxr   _save)r   r   r   ri   r   r   r:   r$   r  r  r  presetr)  r*  ZMAX_BYTES_IN_MARKERr]   ZICC_OVERHEAD_LENZMAX_DATA_BYTES_IN_MARKERmarkersrj   r   rI   rL   rV   r+  r)   bufsizer   r   r   r4  y  s   



&







$r4  c                 C  s@   |   }tdd||g zt| W d S  ty   Y d S w )NZcjpegr   )_dumpr   r   r   r   r   )r   r   r   r   r   r   r   _save_cjpeg0  s   r9  c              	   C  s   t | |}z1| }|d dkr4|jD ]\}}|dkr$d|v r$|  W S qddlm} |||}W |S W |S  ttfyB   Y |S  tyP   t	
d Y |S w )Nr   r   r}   s    hdrgm:Version=")MpoImageFilezTImage appears to be a malformed MPO file, it will be interpreted as a base JPEG file)r   r   r8   ZMpoImagePluginr:  Zadoptr   rD   ra   warningswarn)r   r   r   Zmpheadersegmentcontentr:  r   r   r   jpeg_factory<  s,   

	r?  )z.jfifz.jpez.jpgz.jpegz
image/jpeg)r   r   r   r   r   r   )r   r   r   r   r   )r   r  r   r  r   r  r   r   )NN)1
__future__r   rs   r   r   r   rB   r   rt   r   r;  typingr   r   r   r   r   _binaryr   r   r	   rA   r
   r   r1  ZJpegPresetsr   r   rK   rM   rl   r{   r   r   r   r   r   r/  rw   r  r  r4  r9  r?  Zregister_openr   Zregister_saveZregister_extensionsZregister_mimer   r   r   r   <module>   sH  !

f

0







	













 
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
01234
C	 
3P

 
8
