a
    SicGo                  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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dddddZ!dZ"d dddZ#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 )    N   )Image	ImageFileTiffImagePlugin)i16be)i32be)o8	deprecate)presetsc                 C   s&   t | jdd }t| j| d S )N   )i16fpreadr   
_safe_read)selfmarkern r   O/var/www/html/django/DPS/env/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rt |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< nH|dkr|d d dkrd| jvr*|| jd< n|dkrB|d d dkrB|| jd< n|dkrn|d d dkrn| j| n|dkr|d d dkrd}| jdi }	|||d  dkr*z|d7 }t ||}
|d7 }|| }|d| 7 }||d@ 7 }t||}|d7 }||||  }|
dkrHt|d d! t |dt|dd! t |dd"}||	|
< ||7 }||d@ 7 }W n tjy   Y q*Y n0 qn|d#kr|d d d$krt |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rd| jv rz~|  }|d+ }|d, }zt|d  |d  }W n ty   |}Y n0 t|rt|d-kr|d.9 }||f| jd< W n( tttttfy   d/| jd< Y n0 d S )0Nr   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   r2   )r   r   r   r   r   appapplistappendinfodivmod	Exceptionicclist
setdefaulti32structerror
IndexErrortellgetexiffloat	TypeErrormathisnan
ValueErrorKeyErrorSyntaxErrorZeroDivisionError)r   r   r   sr3   versionr    r!   offsetr)   codename_lensizedatar/   r#   Zresolution_unitZx_resolutionr   r   r   r   APP<   s    







rP   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   r6   r3   r4   r5   )r   r   r   rI   r   r   r   rR      s
    

rR   c           	      C   s  t | jdd }t| j|}t |dt |df| _|d | _| jdkr^td| j d|d | _| jdkrzd	| _	n6| jdkrd
| _	n$| jdkrd| _	ntd| j d|dv rd | j
d< | j
d< | jr<| j  | jd d t| jkr(g }| 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 qLd S )Nr   r1   r   r   r   zcannot handle z-bit layersr   LRGBr   CMYKz-layer images)        progressiveprogression   r(       icc_profile      r   )r   r   r   r   r   _sizebitsrG   layersmoder6   r9   sortlenr5   joinrangelayer)	r   r   r   rI   profilepr^   itr   r   r   SOF   s:    








rn   c                    s   t | jdd }t| j|}t|r|d }|d dkrBdnd}d|d  }t||k rftdt|dkrvd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   ).0rl   rO   r   r   
<listcomp>  r]   zDQT.<locals>.<listcomp>r   )r   r   r   r   r   rf   rG   arraysys	byteorderbyteswapzigzag_indexquantization)r   r   r   rI   v	precisionZ	qt_lengthr   rt   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 13Z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  rV   i  i  i  rW   i  i  i  rX   i  i  i  rY   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 )Nr1   s   r   )prefixr   r   r   _acceptL  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   s>  | j d}t|stdd}d | _| _g | _i | _i | _i | _	i | _
g | _g | _|d }|dkr|| j d }t|}n| j d}qV|tv rt| \}}}|d ur|| | |dkr| j}| jdkrd	}d
d| j d|dffg| _q:| j d}qV|dks|dkrd}qV|dkr0| j d}qVtdqVd S )Nr1   znot a JPEG file   r      r   r   rU   CMYK;Ijpegr   r    i  i   zno marker found)r   r   r   rG   rb   rc   ri   Z
huffman_dcZ
huffman_acr{   r3   r4   r9   r   MARKERrd   rN   tile)r   rI   rl   namedescriptionhandlerrawmoder   r   r   _openZ  sD    



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 qq|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   rT   )rS   YCbCrr   )r   r   r   r   r   r1   )rf   r   decoderconfigrN   rd   minra   )r   rd   rN   deoascaleoriginal_sizerI   boxr   r   r   draft  s4    &"".
zJpegImageFile.draftc                 C   s   t  \}}t| tj| jr:tdd|| jg nt	dz`t
| }|  |j| _W d    n1 st0    Y  W zt| W q ty   Y q0 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_callrE   r   openloadimunlinkOSErrorrd   rN   ra   r   )r   fr   Z_imr   r   r   
load_djpeg  s(    
(

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   sB   | j D ]6\}}|dkr|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       r   s   http://ns.adobe.com/xap/1.0/)r4   rsplit_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   U  s   3%r   c                 C   s   d| j vrd S |   S )Nr#   )r6   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}z,t|}||j |	| t
|}W n. ty } ztd|W Y d }~n
d }~0 0 z|d }W n. ty } ztd	|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rd|d< ntdddddd d!d"d#}||d$ d%|d$< ||d< |	| q|	|d
< W n0 ty } ztd&|W Y d }~n
d }~0 0 |S )'Nr0   r   r   s   MM *><z)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))r6   rF   ioBytesIOr   r   ImageFileDirectory_v2seeknextr   dictr8   rG   rh   r<   unpack_fromzipboolgetr5   )r   rO   file_contentshead
endiannessr6   r0   r   quantZ	mpentriesZrawmpentriesZentrynumZunpackedentrylabelsZmpentryZmpentryattrZ	mptypemapr   r   r   r     sh    



  

	 r   rS   rT   r   r   )1rS   rT   RGBXrU   r   )@r   r   r   r_   r(   r   r      r   r   r   r\   r`         *   r1   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   s   t dddd | S )Nconvert_dict_qtablesr   zConversion is no longer needed)actionr	   qtablesr   r   r   r  ^  s    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 )Nrc   )r   r   r   r   r1   r   )r   rc   ri   	samplingsr   )r   Zsamplingr   r   r   get_samplingc  s    6r  c                 C   s  | j dks| jdkrtdzt| j }W n8 tyb } z td| j d|W Y d }~n
d }~0 0 | j}dd |ddD }|d	d
}|dd
}|d}	|dkrd
}d}d}	n~|t	v rt	| }
d
}|
dd
}|
d}	nRt
|tstdn>|t	v rt	| dd
}t
|	tr6|	t	v r6t	|	 d}	|dkrFd}nV|dkrVd}nF|dkrfd}n6|dkrvd}n&|dkr| jdkrtdt| }dd }|	dkr| jdkrtdt| dd }	||	}	d}|d}|r~d}d}|| }g }|r&||d |  ||d  }qd}|D ]N}tdd| t| }|d| d  t| tt| | 7 }|d7 }q.|d!d"p|d#d"}|d$d"}|d%d}t
|tjr| }|||d&d||d'd|d |d ||	||f| _d}|s
|rr| jd(kr0d)| jd  | jd  }nB|d*ksD|d
kr^d| jd  | jd  }n| jd | jd  }ttj|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)rs   xr   r   r   ru   |  r]   z_save.<locals>.<listcomp>r   r   qualityr  subsamplingr  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                    s`  d u rS t trzzdd  D  W n. tyZ } ztd|W Y d }~n(d }~0 0  fddtdt dD t tttfr\t trfddttD nt trtdt  k rdk sn td	t	D ]h\}}z"t|dkr
t
td
|}W n0 t
yH } ztd|W Y d }~qd }~0 0 t||< qS d S )Nc                 S   s.   g | ]&}| d dd   D ]}t|qqS )#r   r   )splitint)rs   linenumr   r   r   ru     s   z3_save.<locals>.validate_qtables.<locals>.<listcomp>zInvalid quantization tablec                    s   g | ]} ||d   qS )ro   r   )rs   rI   )linesr   r   ru     r]   r   ro   c                    s   g | ]}| v r | qS r   r   )rs   keyr  r   r   ru     s   r   z$None or too many quantization tablesrq   )
isinstancestr
splitlinesrE   rh   rf   tuplelistr   	enumeraterB   rv   )r  r   idxtabler   )r$  r  r   validate_qtables  s8    

 



 z_save.<locals>.validate_qtablesr]   r^   r(   r   z>Hs   r&   rZ   Fr[   optimizer#   smoothZ
streamtyperU   r   _   r   r   )widthheightrE   RAWMODErd   rF   r   encoderinfor   r   r&  r!  r'  r   r  getattrr5   r<   packrf   r   r   ExiftobytesencoderconfigrN   maxr   MAXBLOCK_save)r   r   r   r   r   r6   r   r  r  r  presetr.  extrar^   ZICC_OVERHEAD_LENZMAX_BYTES_IN_MARKERZMAX_DATA_BYTES_IN_MARKERmarkersrl   r   rN   rZ   r/  r#   bufsizer   r   r   r=  q  s    *








"




 r=  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_cjpeg  s    rC  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   MpoImagePluginrD  ZadoptrB   r>   rG   warningswarn)r   r   r   ZmpheaderrD  r   r   r   jpeg_factory  s    

rH  )z.jfifz.jpez.jpgz.jpegz
image/jpeg)NN).rv   r   rC   r   r<   r   rw   r   rF  r   r   r   r   _binaryr   r   r   r;   r   
_deprecater
   ZJpegPresetsr   r   rP   rR   rn   r~   r   r   r   r   r   r4  rz   r  r  r  r=  rC  rH  register_openr   register_saveregister_extensionsregister_mimer   r   r   r   <module>"   s   x0C	 J
 "
