3

hn              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	 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dd$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dddddddddddFdGefddHe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dgdhefdidjefdkdlefdmdnefdodpefddddddddddddd dddefd?Zdd ZG dd dejZdd Zdd ZdddddddZdZ dd ddddiZ!ddۄ Z"dd݄ Z#dd߄ Z$dd Z%dddZ&e
j'ej(e&e e
j)ej(e$ e
j*ej(ddddg e
j+ej(d dS (      N   )Image	ImageFileTiffImagePlugin)i16be)i32be)o8)presetsc             C   s&   t | jjdd }tj| j| d S )N   )i16fpreadr   
_safe_read)selfmarkern r   S/var/www/html/enquirykeeper_venv/lib/python3.6/site-packages/PIL/JpegImagePlugin.pySkip6   s    r   c             C   s  t | jjdd }tj| j|}d|d@  }|| j|< | jj||f |dkr|d d dkrt |d | jd< }t	|d	| jd
< y |d }t |dt |df}W n t
k
r   Y n(X |dkr|| jd< || jd< || jd< nJ|dko|d d dkrd| jkr.|| jd< n|dkrB|d d dkrB|| jd< n|dkrn|d d dkrn| jj| n|dkr|d d dkrd}| jjdi }	x|||d  dkry|d7 }t ||}
|d7 }|| }|d| 7 }||d@ 7 }t||}|d7 }||||  }|
dkrJt|d d! t |dt|dd! t |dd"}||	|
< ||7 }||d@ 7 }W n tjk
r   P Y nX qW n|d#kr|d d d$krt |d| jd%< y|d& }W n tk
r   Y nX || jd'< nF|dkr.|d d d(kr.|dd  | jd)< | jj | d | jd*< d| jkrd| jkry| j }|d+ }|d, }yt|d  |d  }W n tk
r   |}Y nX tj|rt|d-kr|d.9 }||f| jd< W n* tttttfk
r   d0| jd< Y nX d S )1Nr
   zAPP%d   i     s   JFIF   Zjfif   Zjfif_version      
   r   dpi	jfif_unitjfif_densityi  s   Exif exifi  s   FPXR Zflashpix   s   ICC_PROFILE i     s   Photoshop 3.0 	photoshops   8BIMi  r   i   )ZXResolutionZDisplayedUnitsXZYResolutionZDisplayedUnitsYi  s   Adobeadobe   adobe_transforms   MPF mpZmpoffseti(  i     gRQ@H   )r(   r(   )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   sr)   versionr   r   offsetr"   codeZname_lensizedatar%   r   Zresolution_unitZx_resolutionr   r   r   r   APP;   s    







rE   c             C   sJ   t | jjdd }tj| j|}|| jd< || jd< | jjd|f d S )Nr
   commentCOM)	r   r   r   r   r   r,   r)   r*   r+   )r   r   r   r?   r   r   r   rG      s
    

rG   c       	      C   s  t | jjdd }tj| 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krd | j
d< | j
d< | jr@| jj  | jd d t| jkr,g }x"| jD ]}|j|dd   qW dj|}nd }|| j
d< g | _xVtdt|dD ]B}|||d  }| jj|d |d d |d d@ |d f qRW d S )Nr
   r'   r   r   r   zcannot handle z-bit layersr   LRGBr   CMYKz-layer images        progressiveprogression   r!       icc_profile      r   )rK   rL   rM   rN   )r   r   r   r   r   _sizebitsr=   layersmoder,   r/   sortlenr+   joinrangelayer)	r   r   r   r?   ZprofileprS   itr   r   r   SOF   s:    







rb   c                s   t | jjdd }tj| j|}xt|r|d }|d dkrDdnd}d|d  }t||k rhtdtj|dkrxdnd|d|  tj	d	kr|dkr j
   fd
dtD | j|d@ < ||d  }q$W d S )Nr
   r   rU   r   @   zbad quantization table markerBHlittlec                s   g | ]} | qS r   r   ).0r`   )rD   r   r   
<listcomp>  s    zDQT.<locals>.<listcomp>r   )r   r   r   r   r   r[   r=   arraysys	byteorderbyteswapzigzag_indexquantization)r   r   r   r?   vZ	precisionZ	qt_lengthr   )rD   r   DQT   s    
 rp   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JPG	ExtensionZ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)RST0	Restart 0RST1	Restart 1RST2	Restart 2RST3	Restart 3RST4	Restart 4RST5	Restart 5RST6	Restart 6RST7	Restart 7SOIStart of imageEOIEnd of imageZSOSzStart of scanzDefine quantization tableZDNLzDefine number of linesZDRIzDefine restart intervalZDHPzDefine hierarchical progressionZ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JPG0Extension 0JPG1Extension 1JPG2Extension 2JPG3Extension 3JPG4Extension 4JPG5Extension 5JPG6Extension 6JPG7Extension 7JPG8Extension 8JPG9Extension 9JPG10Extension 10JPG11Extension 11JPG12Extension 12JPG13Extension 13Comment)?i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  c             C   s   | dd dkS )Nr   r'   s   r   )prefixr   r   r   _acceptK  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   sB  | j jd}t|stdd}d | _| _g | _i | _i | _i | _	i | _
g | _g | _x|d }|dkr|| j jd }t|}n| j jd}qX|tkr t| \}}}|d k	r|| | |dkr| j}| jdkrd	}d
d| j d|dffg| _P | j jd}qX|dks|dkrd}qX|dkr2| j jd}qXtdqXW d S )Nr'   znot a JPEG file   r      r   i  rJ   zCMYK;Ijpeg i  i   zno marker found)r   r   )r   r   r   r=   rW   rX   r^   Z
huffman_dcZ
huffman_acrn   r)   r*   r/   r   MARKERrY   rC   tile)r   r?   r`   namedescriptionhandlerrawmoder   r   r   _openY  sF    




zJpegImageFile._openc             C   s    | j j|}| rtjrdS |S )z
        internal: read more image data
        For premature EOF and LOAD_TRUNCATED_IMAGES adds EOI marker
        so libjpeg can finish decoding
        s   )r   r   r   ZLOAD_TRUNCATED_IMAGES)r   
read_bytesr?   r   r   r   	load_read  s    zJpegImageFile.load_readc             C   sd  t | jdkrd S | jrd S | jd \}}}}d}| j}|d dkrZ|dkrZ|| _|df}|r$t| jd |d  | jd |d  }xdD ]}	||	krP qW |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   rI   rH   YCbCrr   r   r   r
   r'   )rH   r   )r   r   r
   r   )r[   r   ZdecoderconfigrC   rY   minrV   )r   rY   rC   deoaZscaleZoriginal_sizer?   Zboxr   r   r   draft  s2    &
"&.
zJpegImageFile.draftc             C   s   t j \}}tj| tjj| jr:tjdd|| jg nt	dz*t
j|}|j  |j| _W d Q R X W d ytj| W n tk
r   Y nX X | jj| _| jj| _g | _d S )NZdjpegz-outfilezInvalid Filename)tempfilemkstemposclosepathexistsfilename
subprocess
check_callr;   r   openloadimunlinkOSErrorrY   rC   rV   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 )N)_getmp)r   r   r   r   r     s    zJpegImageFile._getmpc             C   sB   x<| j D ]2\}}|dkr|jdd\}}|dkr| j|S qW 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/)r*   rsplitZ_getxmp)r   segmentcontentr   Z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   T  s   3%r   c             C   s   d| j krd S | j j S )Nr   )r,   r6   Z_get_merged_dict)r   r   r   r   r     s    
r   c          4   C   s$  y| j d }W n tk
r"   d S X tj|}|jd}|d d dkrLdnd}y,tj|}|j|j |j	| t
|}W n, tk
r } ztd|W Y d d }~X nX y|d }W n, tk
r } ztd	|W Y d d }~X nX g }	y|d
 }
 xtd|D ]}tj| d|
|d }d+}t
t||}t|d d,@ t|d d-@ t|d d.@ |d d/@ d? |d d0@ d? |d d@ d}|d dkrd|d< ntdd d!d"d#d$d%d&d'}|j|d( d)|d(< ||d< |	j| qW |	|d
< W n. tk
r } ztd*|W Y d d }~X nX |S )1Nr&   r   r   s   MM *><z)malformed MP Index (unreadable directory)i  z(malformed MP Index (no number of images)i  r   ZLLLHHrU   	AttributeSize
DataOffsetEntryNo1EntryNo2r            r'      r      i )ZDependentParentImageFlagZDependentChildImageFlagZRepresentativeImageFlagZ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   r   r   r   l        i   @i    i   i   )r,   r<   ioBytesIOr   r   ZImageFileDirectory_v2seeknextr   dictr.   r=   r]   r2   unpack_fromzipboolgetr+   )r   rD   file_contentsheadZ
endiannessr,   r&   r   ZquantZ	mpentriesZrawmpentriesZentrynumZunpackedentrylabelsZmpentryZmpentryattrZ	mptypemapr   r   r   r     sb    




r   rH   rI   zCMYK;Ir   )1rH   rI   ZRGBXrJ   r   r   rT   r!   r   r      r
   r   r   rQ   rU      r   *   r'   r   r          r   )   +   	   r$      r   r   (   ,   5   r             '   -   4   6         !   &   .   3   7   <      "   %   /   2   8   ;   =   #   $   0   1   9   :   >   ?   c             C   s   t jdt | S )Nzpconvert_dict_qtables is deprecated and will be removed in Pillow 10(2023-01-02). Conversion is no longer needed.)warningswarnDeprecationWarning)qtablesr   r   r   convert_dict_qtables[  s    r%  c             C   s\   t | d s| jdkrdS | jd dd | jd dd  | jd dd  }tj|d	S )
NrX   r   r   r   r'   r
   )r   r   r&  )hasattrrX   r^   	samplingsr   )r   Zsamplingr   r   r   get_samplingd  s    6r)  c             C   s  yt | j }W n6 tk
rD } ztd| j d|W Y d d }~X nX | j}dd |jdd*D }|jdd+}|jd	d,}|jd
}	|dkrd-}d}d}	n~|tkrt| }
d.}|
jd	d/}|
jd}	nRt|tst	dn>|tk rt| jd	d0}t|	t
r|	tkrt|	 jd}	|dkr(d}nV|dkr8d}nF|dkrHd}n6|dkrXd}n&|dkr~| jdkrvt	dt| }dd }|	dkr| jdkrt	dt| dd }	||	}	d}|jd}|rhd}d}|| }g }x*|r
|j|d |  ||d  }qW d}xV|D ]N}tjdd| t| }|d| d t| tt| | 7 }|d7 }qW |jddp|jd d}|jd!d}|jd"d}t|tjr|j }|||jd#d||jd$d|d |d ||	||f| _d}|s|r\| jd%krd&| jd  | jd  }nB|d'ks.|d1krHd| jd  | jd  }n| jd | jd  }ttj|t|d( t|d }tj| |d)d2| j d|fg| d S )3Nzcannot write mode z as JPEGc             S   s   g | ]}t |qS r   )round)rg   xr   r   r   rh   {  s    z_save.<locals>.<listcomp>r   r   qualityr   subsamplingr$  Zkeeprn   zInvalid quality settingz4:4:4z4:2:2z4:2:0r
   z4:1:1r   z3Cannot use 'keep' when original image is not a JPEGc                sb  d krS t trxydd j D  W n, tk
rX } ztd|W Y d d }~X n X  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 odk n  std	xrt	D ]f\}}y"t|dkrt
tjd
|}W n. t
k
rH } ztd|W Y d d }~X qX t||< qW S d S )Nc             S   s.   g | ]&}|j d dd j  D ]}t|qqS )#r   r   )splitint)rg   linenumr   r   r   rh     s   z3_save.<locals>.validate_qtables.<locals>.<listcomp>zInvalid quantization tablec                s   g | ]} ||d   qS )rc   r   )rg   r?   )linesr   r   rh     s    r   rc   c                s   g | ]}| kr | qS r   r   )rg   key)r$  r   r   rh     s    r   z$None or too many quantization tablesre   )
isinstancestr
splitlinesr;   r]   r[   tuplelistr   	enumerater8   ri   )r$  r   idxtabler   )r3  r$  r   validate_qtables  s2    


z_save.<locals>.validate_qtablesrR   rS   r!   i  z>Hs   s   ICC_PROFILE rO   FrP   optimizer   ZsmoothZ
streamtyperJ   r   _   r   r   )r   r   r&  r&  r&  r&  r&  r&  r&  )r   r   )RAWMODErY   r<   r   Zencoderinfor   r	   r5  r0  r;   r6  r   r)  getattrr+   r2   packr[   r   r   ZExiftobytesZencoderconfigrC   maxr   ZMAXBLOCK_save)r   r   r   r   r   r,   r   r,  r-  r$  presetr=  extrarS   ZICC_OVERHEAD_LENZMAX_BYTES_IN_MARKERZMAX_DATA_BYTES_IN_MARKERmarkersr`   r   rC   rO   r>  r   bufsizer   r   r   rE  r  s    &








"


&

 rE  c             C   sB   | j  }tjdd||g ytj| W n tk
r<   Y nX d S )NZcjpegz-outfile)_dumpr   r   r   r   r   )r   r   r   r   r   r   r   _save_cjpeg  s    rK  c             C   st   t | |}y0|j }|d dkr8ddlm} |j||}W n4 ttfk
rR   Y n tk
rn   tj	d Y nX |S )Ni  r   )MpoImageFilezTImage appears to be a malformed MPO file, it will be interpreted as a base JPEG file)
r   r   ZMpoImagePluginrL  Zadoptr8   r4   r=   r!  r"  )r   r   r   ZmpheaderrL  r   r   r   jpeg_factory  s    
rM  z.jfifz.jpez.jpgz.jpegz
image/jpeg)rq   rr   N)rs   rt   N)ru   rv   N)rw   rx   N)ry   rz   N)r{   r|   N)r}   r~   N)r   r   N)r   r   N)r   r   N)r   r   N)r   r   N)r   r   N)r   r   N)r   r   N)r   r   N)r   r   N)r   r   N)r   r   N)r   r   N)r   r   N)r   r   N)r   r   N)r   r   N)r   r   N)@r   r   r   rT   r!   r   r   r   r
   r   r   rQ   rU   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  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   r   r   r   )NN),ri   r   r9   r   r2   r   rj   r   r!  r   r   r   r   _binaryr   r   r   r1   r   ZJpegPresetsr	   r   rE   rG   rb   rp   r   r   r   r   r   r@  rm   r(  r%  r)  rE  rK  rM  Zregister_openr   Zregister_saveZregister_extensionsZregister_mimer   r   r   r   <module>"   s   x0	 J       
	  