o
    es                     @  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
d Zdd Zdd Zdd Zd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d)d*d+efd,d-d.d/d0efd1d2d3efd4d5d6efd7d8d9efd:d;d<efd=d>d?efd@dAdBefdCdDi dEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYefdZdd[efd\d]d^efd_d`daefdbdcddefdedfdgefdhdidjefdkdldmefi dndodpefdqdrdsefdtdudvef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dddddddddddddddddddefdZdd ZG dd dejZdd Z dd Z!dddddddZ"dZ#d dddZ$dd Z%dd Z&dd Z'dddZ(e)ej*e(e e+ej*e& e,ej*g dâ e-ej*dġ dS )    )annotationsN   )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   F/var/www/html/venv/lib/python3.10/site-packages/PIL/JpegImagePlugin.pySkip9   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 nOw |dkrf|| jd< || jd< || jd< n9|dkr|d d dkrd| jv r| jd  |dd  7  < n|| jd< | j | d | _n|dkr|d d dkr|| 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rZzZ|d7 }t ||}
|d7 }|| }|d| 7 }||d@ 7 }t||}|d7 }||||  }|
d kr5t|d!d" t |dt|dd" t |dd#}||	|
< ||7 }||d@ 7 }W n tjyO   Y nw |||d  dksnP|d$kr|d d d%krt |d| jd&< z|d' }W n
 ty   Y n*w || jd(< n#|dkr|d d d)kr|dd  | jd*< | j | d | jd+< d| jvrd| jv rzD|  }|d, }|d- }zt|d! |d  }W n ty   |}Y nw t|rd.}t||d/kr|d09 }||f| jd< W d S  tjtttttfy   d1| jd< Y d S w d S d S )2Nr   zAPP%d        s   JFIF   jfif   jfif_version      
   r   dpi	jfif_unitjfif_density     s   Exif  exif  s   FPXR flashpix      ICC_PROFILE      s   Photoshop 3.0 	photoshops   8BIMi  r   i   )XResolutionDisplayedUnitsXYResolutionDisplayedUnitsY  s   Adobeadobe   adobe_transforms   MPF mpmpoffseti(  i  zDPI is not a number   gRQ@)H   r8   )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   sr9   versionr!   r"   offsetr,   codename_lensizedatar4   r%   resolution_unitx_resolutionr    msgr   r   r   APP>   s   








rZ   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<   r9   r:   r;   )r   r   r   rP   r   r   r   r\      s
   

r\   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   r7   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   ).0pr   r   r   
<listcomp>   s    zSOF.<locals>.<listcomp>    icc_profiler$      r   )r   r   r   r   r   _sizebitsrN   layers_moder<   rA   sortlenjoinrangelayerr;   )	r   r   r   rP   rY   profilerk   itr   r   r   SOF   s<   







.ry   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   rl   r   @   zbad quantization table markerBHlittlec                   s   g | ]} | qS r   r   )rg   rw   rV   r   r   ri         zDQT.<locals>.<listcomp>r   )r   r   r   r   r   rr   rN   arraysys	byteorderbyteswapzigzag_indexquantization)r   r   r   rP   v	precision	qt_lengthrY   r   r~   r   DQT   s    r   i  SOF0zBaseline DCTi  SOF1zExtended Sequential DCTr`   SOF2zProgressive DCTi  SOF3zSpatial losslessi  DHTzDefine Huffman tablei  SOF5zDifferential sequential DCTra   SOF6zDifferential progressive DCTi  SOF7zDifferential spatiali  )JPG	ExtensionNi  SOF9zExtended sequential DCT (AC)rb   SOF10zProgressive DCT (AC)i  SOF11zSpatial lossless DCT (AC)i  DACz%Define arithmetic coding conditioningi  SOF13z Differential sequential DCT (AC)rc   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 0r#   APP1zApplication segment 1r&   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 12r*   APP13zApplication segment 13r1   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  c                 C  s   | d d dkS )Nr7   s   r   )prefixr   r   r   _accept[  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  s6  | 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r{| j}| jd	krld
}dd| j d|dffg| _d S | j d}n|dv rd}n|dkr| j d}nd}t|q.)Nr7   znot a JPEG file   r   T   r   r   r_   CMYK;Ijpegr   r    >     r   i   zno marker found)r   r   r   rN   rn   ro   ru   
huffman_dc
huffman_acr   r9   r:   rA   r   MARKERmoderU   tile)r   rP   rY   rw   namedescriptionhandlerrawmoder   r   r   _openh  sL   


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_bytesrP   r   r   r   	load_read  s
   zJpegImageFile.load_readc                 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   r^   )r]   YCbCrr   )r   r   r   r   r   r7   )rr   r   decoderconfigrU   rp   minrm   r   )r   r   rU   deoascaleoriginal_sizerP   boxr   r   r   draft  s6   &"".

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OSErrorrL   r   openloadimr   rp   rU   rm   r   )r   fr   rY   _imr   r   r   
load_djpeg  s<   




zJpegImageFile.load_djpegc                 C     t | S N)_getexifr   r   r   r   r       zJpegImageFile._getexifc                 C  r  r  )_getmpr  r   r   r   r    r  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/)r:   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   d  s    3$r   c                 C  s   d| j vrd S |   S )Nr%   )r<   rG   _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 ))Nr5   r   r   s   MM *><r   )TiffImagePluginz)malformed MP Index (unreadable directory)  z(malformed MP Index (no number of images)i  r   LLLHHrl   )	AttributeSize
DataOffsetEntryNo1EntryNo2r  l        i   @i    i      i      i )DependentParentImageFlagDependentChildImageFlag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<   rM   ioBytesIOr   r   r  ImageFileDirectory_v2seeknextr   dictr>   rN   rt   rD   unpack_fromzipboolgetr;   )r   rV   file_contentshead
endiannessr  r<   r5   r   rY   quant	mpentriesrawmpentriesentrynumunpackedentrylabelsmpentrympentryattr	mptypemapr   r   r   r  
  s   







	

r  r]   r^   r   r   )1r]   r^   RGBXr_   r   )@r   r   r   r$   r+   r   r      r   r   r   rf   rl         *   r7   r   r(            )   +   	   r3      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 )Nro   )r   r   r   r   r7   r   )r   ro   ru   	samplingsr3  )r   samplingr   r   r   get_samplingv  s   6rs  c                 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)rg   xr   r   r   ri     r   z_save.<locals>.<listcomp>r    r   qualityrp  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 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
  int)rg   linenumr   r   r   ri     s    z3_save.<locals>.validate_qtables.<locals>.<listcomp>zInvalid quantization tablec                   s   g | ]
} ||d   qS )rz   r   )rg   rP   )linesr   r   ri     s    r   rz   c                   s   g | ]
}| v r | qS r   r   )rg   key)rx  r   r   ri     s    r   z$None or too many quantization tablesr|   )
isinstancestr
splitlinesrL   rt   rr   tuplelistr/  	enumeraterI   r   )rx  r   rY   idxtabler   )r~  rx  r   validate_qtables  sJ   







z_save.<locals>.validate_qtablesextrarj   r   rk   r+   s   r)   r[   rd   Fre   optimizer%   zEXIF data is too longsmoothkeep_rgb
streamtyperestart_marker_blocksrestart_marker_rowsr_   r   _   r   r   )widthheightrL   RAWMODEr   rM   r   encoderinfor3  r
   r  r{  r  r  rs  getattrr;   o16rr   r   r<   r   ExiftobytesencoderconfigrU   maxr   _save)r   r   r   rY   r   r   r<   r    rv  rw  rx  presetr  r  MAX_BYTES_IN_MARKERrk   ICC_OVERHEAD_LENMAX_DATA_BYTES_IN_MARKERmarkersrw   r   rU   r[   rd   r  r%   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_cjpeg;  s   r  c              	   C  sx   t | |}z| }|d dkrddlm} |||}W |S W |S  ttfy-   Y |S  ty;   t	d Y |S w )Nr  r   )MpoImageFilezTImage appears to be a malformed MPO file, it will be interpreted as a base JPEG file)
r   r  MpoImagePluginr  adoptrI   rF   rN   warningswarn)r   r   r   mpheaderr  r   r   r   jpeg_factoryG  s$   
	r  )z.jfifz.jpez.jpgz.jpegz
image/jpeg)NN).
__future__r   r   r*  rJ   r   rD   r   r   r   r  r   r   r   _binaryr   r   r   rC   r   r	   r  JpegPresetsr
   r   rZ   r\   ry   r   r   r   r   r  r  r  r   rq  rs  r  r  r  register_openr  register_saveregister_extensionsregister_mimer   r   r   r   <module>   sH  ! 0







	

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