o
    'j6hY|                     @  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rhd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d0d1d2e#fd3d4d5e#fd6d7d8d9d:e#fd;d<d=e#fd>d?d@e#fdAdBdCe fdDdEdFe#fdGdHdIe#fdJdKdLe#fdMdNi dOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdce fddddee$fdfdgdhe fdidjdke fdldmdne#fdodpdqe fdrdsdte!fdudvdwe!fi 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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.dddӄZ/	ddddׄ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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   b/var/www/html/chefvision.cloud.itp360.com/venv/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r|drt |d | j	d< }t
|d| j	d	< z|d
 }t |dt |df}W n
 tyZ   Y d S w |dkre|| j	d< n|dkrut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r~d }| j	d!i }	|||d"  d#kr|z]|d"7 }t ||}
|d7 }|| }|d| 7 }||d@ 7 }t||}|d"7 }||||  }|
d$krSt|d%d& t |d"t|dd& t |d'd(|	|
< n||	|
< ||7 }||d@ 7 }W n tjyn   Y d S w |||d"  d#ksd S d S |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   jfif   jfif_version      
   r   dpic                 s  s    | ]}|d  V  qdS )RQ@Nr   ).0dr   r   r   	<genexpr>`   s    zAPP.<locals>.<genexpr>	jfif_unitjfif_density  s   Exif  exif      http://ns.adobe.com/xap/1.0/     xmp  s   FPXR flashpix   ICC_PROFILE   s   Photoshop 3.0    	photoshop   s   8BIMi  r   i      )XResolutionDisplayedUnitsXYResolutionDisplayedUnitsY  s   Adobeadobe   adobe_transforms   MPF mp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   srH   versionr.   r/   offsetr;   codename_lensizedatarE   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   rL   rH   rI   rJ   )r   r   r   rY   r   r   r   ra      s
   

ra   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 )r:   Nr   )r+   pr   r   r   
<listcomp>   s    zSOF.<locals>.<listcomp>    icc_profiler2      r    )r   r   r   r   r   _sizebitsSyntaxErrorlayers_moderL   rS   sortlenjoinrangelayerrJ   )	r   r   r   rY   msgprofilerp   itr   r   r   SOF   s<   







.r   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   rq   r   @   zbad quantization table markerBHlittlec                   s   g | ]} | qS r   r   )r+   r~   r_   r   r   rn          zDQT.<locals>.<listcomp>r    )r   r   r   r   r   rx   rt   arraysys	byteorderbyteswapzigzag_indexquantization)r   r   r   rY   v	precision	qt_lengthr|   r   r   r   DQT   s    r   i  SOF0zBaseline DCTi  SOF1zExtended Sequential DCTrf   SOF2zProgressive DCTi  SOF3zSpatial losslessi  DHTzDefine Huffman tablei  SOF5zDifferential sequential DCTrg   SOF6zDifferential progressive DCTi  SOF7zDifferential spatiali  )JPG	ExtensionNi  SOF9zExtended sequential DCT (AC)rh   SOF10zProgressive DCT (AC)i  SOF11zSpatial lossless DCT (AC)i  DACz%Define arithmetic coding conditioningi  SOF13z Differential sequential DCT (AC)ri   SOF14z!Differential progressive DCT (AC)i  SOF15zDifferential spatial (AC)i  )RST0z	Restart 0Ni  )RST1z	Restart 1Ni  )RST2z	Restart 2Ni  )RST3z	Restart 3Ni  )RST4z	Restart 4Ni  )RST5z	Restart 5Ni  )RST6z	Restart 6Ni  )RST7z	Restart 7Ni  )SOIzStart of imageNi  )EOIzEnd of imageN  SOSzStart of scani  zDefine quantization tablei  DNLzDefine number of linesi  DRIzDefine restart intervali  DHPzDefine hierarchical progressioni  EXPzExpand reference componentr!   APP0zApplication segment 0r0   APP1zApplication segment 1r6   APP2zApplication segment 2i  APP3zApplication segment 3i  APP4zApplication segment 4i  APP5zApplication segment 5i  APP6zApplication segment 6i  APP7zApplication segment 7i  APP8zApplication segment 8i  APP9zApplication segment 9i  APP10zApplication segment 10i  APP11zApplication segment 11i  APP12zApplication segment 12r9   APP13zApplication segment 13rB   APP14zApplication segment 14i  APP15zApplication segment 15i  )JPG0zExtension 0Ni  )JPG1zExtension 1Ni  )JPG2zExtension 2N)JPG3zExtension 3N)JPG4zExtension 4N)JPG5zExtension 5N)JPG6zExtension 6N)JPG7zExtension 7N)JPG8zExtension 8N)JPG9zExtension 9N)JPG10zExtension 10N)JPG11zExtension 11N)JPG12zExtension 12N)JPG13zExtension 13NComment)i  i  i  i  i  i  i  i  i  i    i  prefixbytesboolc                 C  s
   |  dS )Ns   )rK   )r   r   r   r   _acceptG  s   
r   c                      s   e Zd ZdZdZd'd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  sJ  | j d}t|sd}t|d}d | _| _d| _g | _i | _i | _	i | _
i | _g | _g | _	 |d }|dkrF|| j d }t|}n| j d}q0|tv rt| \}}}|d ura|| | |dkr| j}| jd	krod
}tdd| j d|dfg| _n | j d}n|dv rd}n|dkr| j d}nd}t|q1|   d S )Nrb   znot a JPEG file   r   T   r   r   re   CMYK;Ijpegr   r    >     r   i   zno marker found)r   r   r   rt   rs   ru   rQ   r{   _huffman_dc_huffman_acr   rH   rI   rS   r   MARKERmoder   _Tiler^   tile_read_dpi_from_exif)r   rY   r|   r~   namedescriptionhandlerrawmoder   r   r   _openT  sR   


!zJpegImageFile._openr   strr   c                 C  s(   |dv rt |d t| d| S t|)N)
huffman_ac
huffman_dcr=   _)r   getattrAttributeError)r   r   r   r   r   __getattr__  s   
zJpegImageFile.__getattr__	list[Any]c                   s   t   | j| jg S N)super__getstate__ru   r{   r   	__class__r   r   r     s   zJpegImageFile.__getstate__statec                   s$   |dd  \| _ | _t | d S )Nr2   )ru   r{   r   __setstate__)r   r   r   r   r   r     s   zJpegImageFile.__setstate__
read_bytesr   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   LOAD_TRUNCATED_IMAGEShasattrr   )r   r   rY   r   r   r   	load_read  s
   zJpegImageFile.load_readr   
str | Noner^   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   rd   )rc   YCbCrr   )r'   r<   r   r   r   rb   )rx   r   decoderconfigr^   
isinstancerO   rv   minrr   r   r   r   )r   r   r^   r,   eoascaleoriginal_sizerY   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 )Ndjpeg-outfilezInvalid Filename)tempfilemkstemposclosepathexistsfilename
subprocess
check_callunlinkOSError
ValueErrorr   openloadimr   rv   r^   rr   r   )r   fr  r|   _imr   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)   r1   i(  i  r   r   zDPI is not a numberrb   r*   )H   r%  )rL   getexiffloat	TypeErrormathisnanr  rV   rW   KeyErrorrt   ZeroDivisionError)r   r1   resolution_unitx_resolutionr)   r|   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   r   r   )r   r   r^   r   r   r  )r   r!  )__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!  c                 C  s   d| j vrd S |   S )Nr1   )rL   r&  _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 )(NrF   r'   s   MM *><r   )TiffImagePluginz)malformed MP Index (unreadable directory)  z(malformed MP Index (no number of images)i  LLLHHrq   )	AttributeSize
DataOffsetEntryNo1EntryNo2r<  l        i   @i    i      i      i )DependentParentImageFlagDependentChildImageFlagRepresentativeImageFlagReservedImageDataFormatMPTyperG  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   rH  Unknownz!malformed MP Index (bad MP Entry))rL   r+  ioBytesIOr   rK   r   r9  ImageFileDirectory_v2seeknextr  dictrN   rt   rz   rV   unpack_fromzipr   getrJ   )r   r_   file_contentshead
endiannessr9  rL   rF   r  r|   quant	mpentriesrawmpentriesentrynumunpackedentrylabelsmpentrympentryattr	mptypemapr   r   r   r/    s   







	

r/  rc   rd   r   r  )1rc   rd   RGBXre   r  )@r   r   r"   r2   r:   r    rA     r   r<   r&   rl   rq         *   rb   r'   r=            )   +   	   rD      rB     (   ,   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   r  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   r<   r   r   rb   r   )r  r   ru   r{   	samplingsrS  )r  samplingr   r   r   get_sampling  s   6r  r   	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}|
dkr| jdkrd}t|t| dd }
||
}
|dd}d}|d }|rd!}|| }t||krd"}t|td| t| }|d#| d$ | 7 }|d%}|rjd&}|| }g }|r@||d |  ||d  }|s.d}|D ]%}td| t| }|d'| d( t| tt| | 7 }|d7 }qD|d)| jd)}|d*d+p|d,d+}|d-d+}|d.d}t
|tjr| }t||krd/}t||||d0d||d1d+|d2d||	|d3d|d4d|
|||f| _d}|s|r| jd5krd6| jd  | jd  }n!|d7ks|d
krd| jd  | jd  }n
| jd | jd  }|r|t|d8 7 }|r|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   rn     r   z_save.<locals>.<listcomp>r)   r   qualityr  subsamplingqtables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 JPEGKstr | tuple[list[int], ...] | list[list[int]] | dict[int, list[int]] | Noner   list[list[int]] | Nonec                   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   )rR   r   )r+   linenumr   r   r   rn     s    z3_save.<locals>.validate_qtables.<locals>.<listcomp>zInvalid quantization tablec                   s   g | ]
} ||d   qS )r   r   )r+   rY   )linesr   r   rn     s    r   r   c                   s   g | ]
}| v r | qS r   r   )r+   key)r  r   r   rn     s    r"   z$None or too many quantization tablesr   )r  r   
splitlinesr  rz   rx   rO   listrP  	enumerater(  r   )r  r  r|   idxtabletable_arrayr   )r  r  r   validate_qtables  sJ   







z_save.<locals>.validate_qtablesextraro   r   r5   rd  zXMP data is too longs   r3   rp   r:   s   r8   r`   rj   Frk   optimizer1   zEXIF data is too longsmoothkeep_rgb
streamtyperestart_marker_blocksrestart_marker_rowsre   r<   _   r"   r   )r  r  r   r  )widthheightr  RAWMODEr   r+  r  encoderinforS  r   r  r   r   r3  r  r   rx   o16rJ   r
   rL   r   Exiftobytesencoderconfigr^   maxr   _saver   )r  r   r  r|   r   r  rL   r)   r  r  r  presetr  r  MAX_BYTES_IN_MARKERr5   overhead_lenmax_data_bytes_in_markerr^   rp   markersr~   r   r`   rj   r  r1   bufsizer   r   r   r    s   




*








r  c                 C  s@   |   }tdd||g zt| W d S  ty   Y d S w )Ncjpegr  )_dumpr  r  r  r  r  )r  r   r  r  r   r   r   _save_cjpegZ  s   r  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/  rI   MpoImagePluginr   adoptr(  rX   rt   warningswarn)r   r  r  mpheadersegmentcontentr   r   r   r   jpeg_factoryf  s0   

	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  r  r   r  r  r  r   r   r   )r   r  r  r  r   r  )6
__future__r   r   rK  r)  r  rV   r  r   r  r  typingr   r   r   r   r   _binaryr   r   r	   rU   r
   r   r  
_deprecater   JpegPresetsr   TYPE_CHECKINGr  r   r   r   ra   r   r   r   r   r   r#  r/  r  r   r  r  r  r  r  register_openr3  register_saveregister_extensionsregister_mimer   r   r   r   <module>   sR  !


j

0







	

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