3

Zk              A   @   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mZmZm	Z	 ddl
mZmZmZ ddlmZ ddlmZ d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/d0efd1d2efdddddddddddGdHefddIefdJdKefdLdMefdNdOefdPdQefdRdSefdTdUefdVdWefdXdYefdZd[efd\d]efd^d_efd`daefdbdcefdddeefdfdgefdhdiefdjdkefdldmefdndoefdpdqefdddddddddd ddddddefd?Zdd ZG dd dejZdd 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 (
      )print_functionN   )Image	ImageFileTiffImagePlugin)i8o8i16be)presets)isStringTypez0.6c             C   s&   t | jjdd }tj| j| d S )N   )i16fpreadr   
_safe_read)selfmarkern r   5/usr/lib/python3/dist-packages/PIL/JpegImagePlugin.pySkip4   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$t
|d }t |dt |df}W n   Y n(X |dkr|| jd< || jd< || jd< n|dko|d d dkr|| jd< n|dkr.|d d dkr.|| jd< n|dkrX|d d dkrX| jj| n|dkr|d d dkrt |d| jd< yt
|d }W n   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ryl| j }	|	d! }
|	d" }y|d# |d  }W n tk
rT   |}Y nX |
d$krh|d%9 }||f| jd< W n& tttfk
r   d'| jd< Y nX d S )(Nr   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   AdobeZadobeadobe_transforms   MPF mpZmpoffseti(  i  r      gRQ@H   )r&   r&   )r   r   r   r   r   appapplistappendinfodivmodr   icclisttell_getexif	TypeErrorKeyErrorSyntaxErrorZeroDivisionError)r   r   r   sr'   versionr   r    r#   r!   Zresolution_unitZx_resolutionr   r   r   r   APP9   s^    




r5   c             C   s@   t | jjdd }tj| j|}|| jd< | jjd|f d S )Nr   COM)r   r   r   r   r   r'   r(   r)   )r   r   r   r3   r   r   r   r6      s    
r6   c       	      C   s  t | jjdd }tj| j|}t |dd  t |dd  f| _t|d | _| jdkrjtd| j t|d | _	| j	dkrd| _
n2| j	dkrd	| _
n | j	d
krd| _
ntd| j	 |dkrd | jd< | jd< | jrP| jj  t| jd d t| jkr<g }x"| jD ]}|j|dd   qW dj|}nd }|| jd< d | _xbtdt|dD ]N}|||d  }| jj|d t|d d t|d d@ t|d f qbW d S )Nr   r%   r   r   r   zcannot handle %d-bit layersr   LRGBr   CMYKzcannot handle %d-layer images        progressiveprogression          icc_profile      r   )r:   r;   r<   r=   )r   r   r   r   r   sizer   bitsr1   layersmoder*   r,   sortlenr)   joinrangelayer)	r   r   r   r3   ZprofileprC   itr   r   r   SOF   s:    "





rR   c             C   s   t | jjdd }tj| j|}xht|rt|dk r@tdt|d }|d dkrtjd|dd | j	|d@ < |dd  }q$d S q$W d S )	Nr   A   zbad quantization table markerr   rE   Br   r   )
r   r   r   r   r   rK   r1   r   arrayquantization)r   r   r   r3   vr   r   r   DQT   s    	
rX   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 0Z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      r   )prefixr   r   r   _accept$  s    r   c               @   sD   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S )JpegImageFileJPEGzJPEG (ISO 10918)c             C   sB  | j jd}t|dkr tdd | _| _g | _i | _i | _i | _	i | _
g | _g | _xt|}|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 filer   i  r9   zCMYK;Ijpeg i  r   i   zno marker found)r   r   )r   r   r   r1   rG   rH   rN   Z
huffman_dcZ
huffman_acrV   r'   r(   r,   r   MARKERrI   rF   tile)r   r3   rP   nameZdescriptionZhandlerrawmoder   r   r   _open0  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   Z
read_bytesr3   r   r   r   	load_readd  s    zJpegImageFile.load_readc       	      C   s<  t | jdkrd S | jrd S | jd \}}}}d}|d dkrT|dkrT|| _|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| _| S )Nr   r   r8   r7   YCbCrr   r   r   r   r%   )r7   r   )r   r   r   r   )rK   r   ZdecoderconfigrI   minrF   )	r   rI   rF   deoaZscaler3   r   r   r   drafts  s(    &
T.
zJpegImageFile.draftc             C   s   dd l }dd l}dd l}|j \}}|j| |jj| jrR|jdd|| jg nt	dzt
j|}|j  |j| _W d y|j| W n tk
r   Y nX X | jj| _| jj| _g | _d S )Nr   Zdjpegz-outfilezInvalid Filename)
subprocesstempfileosZmkstempclosepathexistsfilename
check_call
ValueErrorr   openloadimunlinkOSErrorrI   rF   r   )r   r   r   r   fr   Z_imr   r   r   
load_djpeg  s&    



zJpegImageFile.load_djpegc             C   s   t | S )N)r.   )r   r   r   r   r.     s    zJpegImageFile._getexifc             C   s   t | S )N)_getmp)r   r   r   r   r     s    zJpegImageFile._getmpN)__name__
__module____qualname__formatZformat_descriptionr   r   r   r   r.   r   r   r   r   r   r   +  s   4r   c                s   dd   fdd| j  D S )Nc          	   S   s6   y$t | dkr"t| t r"| d S W n   Y nX | S )Nr   r   )rK   
isinstancedict)valuer   r   r   _fixup  s    z_fixup_dict.<locals>._fixupc                s   i | ]\}} ||qS r   r   ).0krW   )r   r   r   
<dictcomp>  s    z_fixup_dict.<locals>.<dictcomp>)items)Zsrc_dictr   )r   r   _fixup_dict  s    r   c             C   s   y| j d }W n tk
r"   d S X tj|dd  }|jd}tj|}|j| tt	|}y|j
|d  W n ttfk
r   Y n$X tj|}|j| |jt	| y|j
|d  W n ttfk
r   Y n"X tj|}|j| t	||d< |S )Nr!   rD   r   ii  i%  )r*   r0   ioBytesIOr   r   ZImageFileDirectory_v1r   r   r   seekr/   update)r   datafileheadr*   r!   r   r   r   r.     s0    






r.   c          %   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| t|}W n   t	dY nX y|d }W n tk
r   t	d	Y nX g }y|d
 }	 xt
d|D ]}
tjdj||	|
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rjd|d< nt	dd d!d"d#d$d%d&d'}|j|d( d)|d(< ||d< |j| qW ||d
< W n tk
r   t	d*Y 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{}LLLHHrE   	AttributeSize
DataOffsetEntryNo1EntryNo2r            r%      r      i )ZDependentParentImageFlagZDependentChildImageFlagZRepresentativeImageFlagZReservedImageDataFormatMPTyper   r   z!unsupported picture format in MPOZ	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   ZUnknownz!malformed MP Index (bad MP Entry))r   r   r   r   r   l        i   @i    i   i   )r*   r0   r   r   r   r   ZImageFileDirectory_v2r   r   r1   rM   structZunpack_fromr   zipboolgetr)   )r   r   Zfile_contentsr   Z
endiannessr*   r$   ZquantZ	mpentriesZrawmpentriesZentrynumZunpackedentryZlabelsZmpentryZmpentryattrZ	mptypemapr   r   r   r     sj    



 


r   r7   r8   zCMYK;Ir   )1r7   r8   ZRGBXr9   r   r   rD   rA   r   r      r   r   r   r@   rE      r   *   r%   r   r"         r   )   +   	         r   r   (   ,   5   r             '   -   4   6         !   &   .   3   7   <      "   %   /   2   8   ;   =   #   $   0   1   9   :   >   ?   c                sJ    fddt t D  x*t D ]\}fddtD  |< q$W  S )Nc                s   g | ]}| kr | qS r   r   )r   key)qtablesr   r   
<listcomp>U  s    z(convert_dict_qtables.<locals>.<listcomp>c                s   g | ]} | qS r   r   )r   rP   )tabler   r   r  W  s    )rM   rK   	enumeratezigzag_index)r  idxr   )r  r  r   convert_dict_qtablesT  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 )
NrH   r   r   r   r%   r   )r   r   r  )hasattrrH   rN   	samplingsr   )r   Zsamplingr   r   r   get_sampling[  s    6r  c             C   st  yt | j }W n" tk
r0   td| j Y nX | j}dd |jdd)D }|jdd}|jdd*}|jd	}|d
krd}d
}d
}nx|tkrt| }	d}|	jdd+}|	jd}nLt|tst	dn8|tkrt| jdd,}t
|o|tk rt| jd}|dkrd}nV|dkrd}nF|dkr.d}n6|dkr>d}n&|d
krd| jdkr\t	dt| }dd }
|d
kr| jdkrt	dt| dd }|
|}d}|jd}|rNd}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 }qW |jddpf|jdd}|jd d}|||jd!d||jd"d|d |d ||||jd#df| _d}|s|r(| jd$krd%| jd  | jd  }nB|d&ks|dkrd| jd  | jd  }n| jd | jd  }ttj|t|jd#dd' t|d }tj| |d(d-| j d|fg| d S ).Nzcannot write mode %s as JPEGc             S   s   g | ]}t t|qS r   )intround)r   xr   r   r   r  r  s    z_save.<locals>.<listcomp>r   r   qualitysubsamplingr   r  ZkeeprV   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                s*  | d kr| S t | rfydd | j D  W n tk
rF   tdY n X  fddtdt dD } t| tttfr&t| trt	| } nt| trt| } dt|   k odk n  stdx^t
| D ]R\}}yt|dkr tjd	|}W n tk
r   tdY qX t|| |< qW | S d S )
Nc             S   s.   g | ]&}|j d dd j  D ]}t|qqS )#r   r   )splitr  )r   lineZnumr   r   r   r    s    z3_save.<locals>.validate_qtables.<locals>.<listcomp>zInvalid quantization tablec                s   g | ]} ||d   qS )@   r   )r   r3   )linesr   r   r    s    r   r  r   z$None or too many quantization tablesrT   )r   
splitlinesr   rM   rK   r   tuplelistr   r  r	  rU   r/   )r  r  r  r   )r  r   validate_qtables  s0    


z_save.<locals>.validate_qtablesrB   rC   rA   i  z>Hs   s   ICC_PROFILE r>   Fr?   optimizeZsmoothZ
streamtyper!   r9   r   _   r   r   )r   r   r  r  r  )r   r   )RAWMODErI   r0   IOErrorZencoderinfor   r
   r   r  r   r   r   r  getattrr)   r   ZpackrK   r   ZencoderconfigrF   maxr   ZMAXBLOCK_save)r   r   r   r   r*   r   r  r  r  Zpresetr  ZextrarC   ZICC_OVERHEAD_LENZMAX_BYTES_IN_MARKERZMAX_DATA_BYTES_IN_MARKERZmarkersrP   r   rF   r>   r  bufsizer   r   r   r%  i  s    










&

r%  c             C   sR   dd l }dd l}| j }|jdd||g y|j| W n tk
rL   Y nX d S )Nr   Zcjpegz-outfile)r   r   Z_dumpr   r   r   )r   r   r   r   r   r   r   r   r   _save_cjpeg  s    r'  c             C   sr   t | |}y.|j }|d dkr6ddlm} || |}W n4 ttfk
rP   Y n tk
rl   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MpoImagePluginr(  r/   
IndexErrorr1   warningswarn)r   r   r   Zmpheaderr(  r   r   r   jpeg_factory
  s    
r,  z.jfifz.jpez.jpgz.jpegz
image/jpeg)rY   rZ   N)r[   r\   N)r]   r^   N)r_   r`   N)ra   rb   N)rc   rd   N)re   rf   N)rg   rh   N)ri   rj   N)rk   rl   N)rm   rn   N)ro   rp   N)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   r   rD   rA   r   r   r   r   r   r   r@   rE   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),Z
__future__r   rU   r   r   r*  r   r   r   r   Z_binaryr   r   r	   r   ZJpegPresetsr
   Z_utilr   __version__r   r5   r6   rR   rX   r   r   r   r   r.   r   r!  r
  r  r  r  r%  r'  r,  Zregister_openr   Zregister_saveZregister_extensionsZregister_mimer   r   r   r   <module>#   s   T
0 -M       
 