
 X^g              @   @   sl  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l m Z d  d l m Z m Z m Z m	 Z	 d  d l
 m Z d  d l m Z e	 j Z e	 j Z e	 j Z e	 j Z d Z d d   Z d	 d
   Z d d   Z d d   Z d d   Z i? d d e f d 6d d e f d 6d d e f d 6d d e f d 6d d e f d 6d  d! e f d" 6d# d$ e f d% 6d& d' e f d( 6d,d+ 6d, d- e f d. 6d/ d0 e f d1 6d2 d3 e f d4 6d5 d6 e f d7 6d8 d9 e f d: 6d; d< e f d= 6d> d? e f d@ 6d-dC 6d.dF 6d/dI 6d0dL 6d1dO 6d2dR 6d3dU 6d4dX 6d5d[ 6d6d^ 6d_ d` e f da 6d db e f dc 6dd de e f df 6dg dh e f di 6dj dk e f dl 6dm dn e f do 6dp dq e f dr 6ds dt e f du 6dv dw e f dx 6dy dz e f d{ 6d| d} e f d~ 6d d e f d 6d d e f d 6d d e f d 6d d e f d 6d d e f d 6d d e f d 6d d e f d 6d d e f d 6d d e f d 6d d e f d 6d d e f d 6d7d 6d8d 6d9d 6d:d 6d;d 6d<d 6d=d 6d>d 6d?d 6d@d 6dAd 6dBd 6dCd 6dDd 6d d e f d 6Z d d   Z Gd d   d e j  Z d d   Z d d   Z d d   Z i d d 6d d 6d d 6d d 6d d 6d d 6d d 6Z  dEZ! i d  dF6d dG6d dH6Z" dd  Z# dd   Z$ d!d"  Z% d#d$  Z& d d d%d& Z' e j( e j) e' e  e j* e j) e%  e j+ e j) d' e j+ e j) d( e j+ e j) d) e j+ e j) d* e j, e j) d+ d S(I      N)unpack_from)Image	ImageFileTiffImagePlugin_binary)presets)isStringTypez0.6c             C   s3   t  |  j j d   d } t j |  j |  d  S)N   )i16fpreadr   
_safe_read)selfmarkern r   P/home/ubuntu/projects/ifolica/lib/python3.4/site-packages/PIL/JpegImagePlugin.pySkip7   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 r*t  | d  |  j d <} t	 | d	  |  j d
 <y2 t
 | d  } t  | d  t  | d  f } Wn YqX| d k r| |  j d <n  | |  j d <| |  j d <nZ| d k r\| d  d  d k r\| |  j d <n(| d k r| d  d  d k r| |  j d <n | d k r| d  d  d k r|  j j |  n | d k r*| d  d  d k r*t  | d  |  j d <y t
 | d  } Wn YqX| |  j d <nZ | d k r| d  d  d k r| d d   |  j d <|  j j   | d |  j d  <n  d  S)!Nr	   zAPP%d   i     s   JFIF   Zjfif   Zjfif_version      
      dpi	jfif_unitjfif_densityi  s   Exif exifi  s   FPXR Zflashpix   s   ICC_PROFILE i  s   Adobeadobeadobe_transforms   MPF mpZmpoffset)r
   r   r   r   r   appapplistappendinfodivmodi8icclisttell)	r   r   r   sr$   versionr   r   r"   r   r   r   APP<   sB    """""""r.   c             C   sX   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   r,   r   r   r   r/   |   s    r/   c       	      C   sU  t  |  j j d   d } t j |  j |  } t  | d d    t  | d d    f |  _ t | d  |  _ |  j d k r t d |  j   n  t | d  |  _	 |  j	 d k r d |  _
 nI |  j	 d k r d	 |  _
 n. |  j	 d
 k r d |  _
 n t d |  j	   | d k r6d |  j d <|  j d <n  |  j r|  j j   t |  j d d  t |  j  k rg  } x( |  j D] } | j | d d    qWd j |  } n d  } | |  j d <d  |  _ n  xz t d t |  d  D]` } | | | d  } |  j j | d t | d  d t | d  d @t | d  f  qWd  S)Nr	      r   r   r   zcannot handle %d-bit layersr   LRGBr   CMYKzcannot handle %d-layer images        progressiveprogression          icc_profile      r   )r4   r5   r6   r7   )r
   r   r   r   r   sizer)   bitsSyntaxErrorlayersmoder'   r*   sortlenr&   joinrangelayer)	r   r   r   r,   Zprofilepr=   itr   r   r   SOF   s:    /	&rM   c             C   s   t  |  j j d   d } t j |  j |  } x t |  r t |  d k  ra t d   n  t | d  } | d d k r t j d | d d   |  j	 | d @<| d d   } q4 d  Sq4 Wd  S)	Nr	   A   zbad quantization table markerr   r?   Br   r   )
r
   r   r   r   r   rF   rB   r)   arrayquantization)r   r   r   r,   vr   r   r   DQT   s    	'rS   ZSOF0zBaseline DCTi  ZSOF1zExtended Sequential DCTi  ZSOF2zProgressive DCTi  ZSOF3zSpatial losslessi  ZDHTzDefine Huffman tablei  ZSOF5zDifferential sequential DCTi  ZSOF6zDifferential progressive DCTi  ZSOF7zDifferential spatiali  JPG	Extensioni  ZSOF9zExtended sequential DCT (AC)i  ZSOF10zProgressive DCT (AC)i  ZSOF11zSpatial lossless DCT (AC)i  ZDACz%Define arithmetic coding conditioningi  ZSOF13z Differential sequential DCT (AC)i  ZSOF14z!Differential progressive DCT (AC)i  ZSOF15zDifferential spatial (AC)i  RST0	Restart 0i  RST1	Restart 1i  RST2	Restart 2i  RST3	Restart 3i  RST4	Restart 4i  RST5	Restart 5i  RST6	Restart 6i  RST7	Restart 7i  SOIStart of imagei  EOIEnd of imagei  ZSOSzStart of scani  zDefine quantization tablei  ZDNLzDefine number of linesi  ZDRIzDefine restart intervali  ZDHPzDefine hierarchical progressioni  ZEXPzExpand reference componenti  ZAPP0zApplication segment 0i  ZAPP1zApplication segment 1i  ZAPP2zApplication segment 2i  ZAPP3zApplication segment 3i  ZAPP4zApplication segment 4i  ZAPP5zApplication segment 5i  ZAPP6zApplication segment 6i  ZAPP7zApplication segment 7i  ZAPP8zApplication segment 8i  ZAPP9zApplication segment 9i  ZAPP10zApplication segment 10i  ZAPP11zApplication segment 11i  ZAPP12zApplication segment 12i  ZAPP13zApplication segment 13i  ZAPP14zApplication segment 14i  ZAPP15zApplication segment 15i  JPG0Extension 0i  JPG1Extension 1i  JPG2Extension 2i  JPG3Extension 3i  JPG4Extension 4i  JPG5Extension 5i  JPG6Extension 6i  JPG7Extension 7i  JPG8Extension 8i  JPG9Extension 9i  JPG10Extension 10i  JPG11Extension 11i  JPG12Extension 12i  JPG13Extension 13i  Commenti  c             C   s   |  d d  d k S)Nr   r   s   r   )prefixr   r   r   _accept  s    r   c               @   sX   e  Z d  Z d Z 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  j d  } t |  d k r3 t d   n  d |  _ |  _ g  |  _ i  |  _ i  |  _ i  |  _	 i  |  _
 g  |  _ g  |  _ xJt |  } | d k r | |  j  j d  } t |  } n |  j  j d  } q | t k r}t | \ } } } | d  k	 r| |  |  n  | d k rh|  j } |  j d k r?d } n  d d |  j d | d	 f f g |  _ Pn  |  j  j d  } q | d k s| d
 k rd } q | d k r|  j  j d  } q t d   q Wd  S)Nr      znot a JPEG filer   i  r3   zCMYK;Ijpeg i  s   i   zno marker found)r   r   )r   r   r)   rB   rA   rC   rI   Z
huffman_dcZ
huffman_acrQ   r$   r%   r*   r
   MARKERrD   r@   tile)r   r,   rK   namedescriptionhandlerrawmoder   r   r   _open  sF    										zJpegImageFile._openc       	      C   s  t  |  j  d k r d  S|  j d \ } } } } d } | d d k rl | d k rl | |  _ | d f } n  | rdt |  j d | d |  j d | d  } x* d d d	 d g D] } | | k r Pq q W| d | d | d	 | d | d | | d | d
 | d | d | | d f } |  j d | d | |  j d | d | f |  _ | } n  | | | | f g |  _ | d f |  _ |  S)Nr   r   r2   r1   YCbCrr   r   r   r	   r0   )r1   r   )rF   r   rD   maxr@   Zdecoderconfig)	r   rD   r@   deoaZscaler,   r   r   r   draftS  s$    	-Z5	zJpegImageFile.draftc             C   s  d d  l  } d d  l } d d  l } | j   \ } } | j |  | j j |  j  rw | j d d | |  j g  n t	 d   z) t
 j |  } | j   | j |  _ Wd  y | j |  Wn t k
 r Yn XX|  j j |  _ |  j j |  _ g  |  _ d  S)Nr   Zdjpegz-outfilezInvalid Filename)
subprocesstempfileosmkstempclosepathexistsfilename
check_call
ValueErrorr   openloadimunlinkOSErrorrD   r@   r   )r   r   r   r   fr   Z_imr   r   r   
load_djpegm  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._getmpN)
__name__
__module____qualname__formatZformat_descriptionr   r   r   r   r   r   r   r   r   r     s   4r   c                s/   d d     t    f d d   |  j   D  S)Nc          	   S   s=   y. t  |   d k r- t |  t  r- |  d SWn Yn X|  S)Nr   r   )rF   
isinstancedict)valuer   r   r   _fixup  s    " z_fixup_dict.<locals>._fixupc                s(   g  |  ] \ } } |   |  f  q Sr   r   ).0krR   )r   r   r   
<listcomp>  s   	 z_fixup_dict.<locals>.<listcomp>)r   items)Zsrc_dictr   )r   r   _fixup_dict  s    r   c             C   s?  y |  j  d } Wn t k
 r) d  SYn Xt j | d d    } | j d  } t j |  } | j |  t t	 |   } y | j
 | d  Wn t t f k
 r Yn0 Xt j |  } | j |  | j t	 |   y | j
 | d  Wn t t f k
 rYn- Xt j |  } | j |  t	 |  | d <| S)Nr   r>   r   ii  i%  )r'   KeyErrorioBytesIOr   r   ZImageFileDirectory_v1r   r   r   seek	TypeErrorupdate)r   datafileheadr'   r   r   r   r   r     s0    	r   c          "   C   s~  y |  j  d } Wn t k
 r) d  SYn Xt j |  } | j d  } | d  d  d k rd d n d } y, t j |  } | j |  t |  } Wn t	 d   Yn Xy | d } Wn t k
 r t	 d	   Yn Xg  } yw| d
 }	 x\t
 d |  D]K}
 t d j |  |	 |
 d  } d3 } t t | |   } i t | d d4 @ d 6t | d d5 @ d 6t | d d6 @ d 6| d d7 @d ?d 6| d d8 @d ?d 6| d d  @d! 6} | d d k rd" | d <n t	 d#   i d$ d 6d% d& 6d' d( 6d) d* 6d+ d, 6d- d. 6d/ d0 6} | j | d! d1  | d! <| | d <| j |  q W| | d
 <Wn t k
 ryt	 d2   Yn X| S)9Nr#   r   r   s   MM *><z)malformed MP Index (unreadable directory)i  z(malformed MP Index (no number of images)i  r   z{0}LLLHHr?   	AttributeSize
DataOffsetEntryNo1EntryNo2r      ZDependentParentImageFlag   ZDependentChildImageFlag   ZRepresentativeImageFlagr0      ZReservedr      ZImageDataFormati ZMPTyper   z!unsupported picture format in MPOZ	Undefinedz Large Thumbnail (VGA Equivalent)i  z$Large Thumbnail (Full HD Equivalent)i  zMulti-Frame Image (Panorama)i  zMulti-Frame Image: (Disparity)i  z Multi-Frame Image: (Multi-Angle)i  zBaseline MP Primary Imagei   Unknownz!malformed MP Index (bad MP Entry))z	AttributezSizer   r   r   l        i   @i    i   i   )r'   r   r   r   r   r   ZImageFileDirectory_v2r   r   rB   rH   r   r   zipboolgetr&   )r   r   file_contentsr   Z
endiannessr'   r#   ZquantZ	mpentriesZrawmpentriesZentrynumZunpackedentrylabelsZmpentryZmpentryattrZ	mptypemapr   r   r   r     sn    	"
 




r   r1   1r2   RGBAZRGBXzCMYK;Ir3   r   r   r   r>   r;   r   r      r	   r   r   r:   r?      r   *   r0   r   r          r   )   +   	         r   r   (   ,   5   r             '   -   4   6         !   &   .   3   7   <      "   %   /   2   8   ;   =   #   $   0   1   9   :   >   ?   c                sc     f d d   t  t     D   x7 t    D]) \ }   f d d   t D   | <q2 W  S)Nc                s&   g  |  ] } |   k r   |  q Sr   r   )r   key)qtablesr   r   r   1  s   	 z(convert_dict_qtables.<locals>.<listcomp>c                s   g  |  ] }   |  q Sr   r   )r   rK   )tabler   r   r   3  s   	 )rH   rF   	enumeratezigzag_index)r  idxr   )r  r  r   convert_dict_qtables0  s    %!r  c             C   st   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)
NrC   r   r   r   r0   r	   )r   r   r  )hasattrrC   rI   	samplingsr   )r   Zsamplingr   r   r   get_sampling7  s    Ar  c             C   s  y t  |  j } Wn% t k
 r8 t d |  j   Yn X|  j d k r[ t j d t  n  |  j } d d   | j d d(  D } | j d d  } | j d	 d)  } | j d  } | d k r d } d } d } n | t	 k rt	 | }	 d } |	 j d	 d*  } |	 j d  } nq t
 | t  s5t d   nS | t	 k rZt	 | j d	 d+  } n  t |  r| t	 k rt	 | j d  } n  | d k rd } nc | d k rd
 } nN | d k rd } n9 | d k r |  j d k rt d   n  t |   } n  d d   }
 | d k rK|  j d k r6t d   n  t |  d d   } n  |
 |  } d } | j d  } | r6d } d } | | } g  } x1 | r| j | d  |   | | d   } qWd
 } xk | D]` } t j d d | t |   } | d | d t |  t t |   | 7} | d
 7} qWn  | j d d  pW| j d  d  } | j d! d  } | | | j d" d  | | j d# d  | d | d
 | | | | j d$ d  f |  _ d } | s| r&| d% k s| d k rd |  j d |  j d
 } q&|  j d |  j d
 } n  t t j | t | j d$ d   d&  } t j |  | d' d, |  j d | f g |  d  S)-Nzcannot write mode %s as JPEGr   zYou are saving RGBA image as JPEG. The alpha channel will be discarded. This conversion is deprecated and will be disabled in Pillow 3.7. Please, convert the image to RGB explicitly.c             S   s"   g  |  ] } t  t |    q Sr   )intround)r   xr   r   r   r   V  s   	 z_save.<locals>.<listcomp>r   r   qualitysubsamplingr   r  keeprQ   zInvalid quality settingz4:4:4z4:2:2z4:1:1r	   r   z3Cannot use 'keep' when original image is not a JPEGc                s  |  d  k r |  St  |   r y d d   |  j   D   Wn t k
 rY t d   Yq X  f d d   t d t    d  D }  n  t |  t t t f  rt |  t  r t	 |   }  n t |  t  r t |   }  n  d t |   k  o d k  n st d   n  xy t
 |   D]k \ } } y. t |  d k rA  n  t j d	 |  } Wn t k
 rtt d   YqXt |  |  | <qW|  Sd  S)
Nc             S   s?   g  |  ]5 } | j  d  d  d j    D] } t |   q& q S)#r   r   )splitr  )r   linenumr   r   r   r   ~  s   	 z3_save.<locals>.validate_qtables.<locals>.<listcomp>zInvalid quantization tablec                s$   g  |  ] }   | | d    q S)@   r   )r   r,   )linesr   r   r     s   	 r   r  r   z$None or too many quantization tablesrO   )r   
splitlinesr   rH   rF   r   tuplelistr   r  r  rP   r   )r  r
  r  r   )r  r   validate_qtablesy  s0    ."z_save.<locals>.validate_qtablesr<   r=   r;   i  z>Hs   s   ICC_PROFILE r8   Fr9   optimizeZsmoothZ
streamtyper   _   r   r   )r   r   r  r  r  )r   r   )RAWMODErD   r   IOErrorwarningswarnDeprecationWarningZencoderinfor   r   r   r  r   r   r   r  getattrr&   structpackrF   o8Zencoderconfigr@   r   r   ZMAXBLOCK_save)r   r   r   r   r'   r   r  r  r  presetr  extrar=   ZICC_OVERHEAD_LENZMAX_BYTES_IN_MARKERZMAX_DATA_BYTES_IN_MARKERmarkersrK   r   r@   r8   r   bufsizer   r   r   r+  E  s    
		
			
	 -+r+  c             C   sg   d d  l  } d d  l } |  j   } | j d d | | g  y | j |  Wn t k
 rb Yn Xd  S)Nr   Zcjpegz-outfile)r   r   _dumpr   r   r   )r   r   r   r   r   r   r   r   r   _save_cjpeg  s    r1  c             C   s   t  |  |  } yB | j   } | d d k rP d d l m } | |  |  } n  Wn6 t t f k
 rk Yn t k
 r t j d  Yn X| S)Ni  r   )MpoImageFilezTImage appears to be a malformed MPO file, it will be interpreted as a base JPEG file)	r   r   ZMpoImagePluginr2  r   
IndexErrorrB   r$  r%  )r   r   r   Zmpheaderr2  r   r   r   jpeg_factory  s    r4  z.jfifz.jpez.jpgz.jpegz
image/jpeg)rT   z	ExtensionN)rV   rW   N)rX   rY   N)rZ   r[   N)r\   r]   N)r^   r_   N)r`   ra   N)rb   rc   N)rd   re   N)rf   rg   N)rh   ri   N)rj   rk   N)rl   rm   N)rn   ro   N)rp   rq   N)rr   rs   N)rt   ru   N)rv   rw   N)rx   ry   N)rz   r{   N)r|   r}   N)r~   r   N)r   r   N)r   r   N)r   r   N)@r   r   r   r>   r;   r   r   r   r	   r   r   r:   r?   r   r   r   r0   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   )-rP   r(  r   r$  r   ZPILr   r   r   r   ZPIL.JpegPresetsr   Z	PIL._utilr   r)   r*  Zi16ber
   Zi32beZi32__version__r   r.   r/   rM   rS   r   r   r   r   r   r   r"  r	  r  r  r  r+  r1  r4  Zregister_openr   Zregister_saveZregister_extensionZregister_mimer   r   r   r   <module>#   s   "				@
0w-L
       

