
O'^c        @   @   sB  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   Z d   Z d	   Z d
   Z 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* d+ e f d, 6d- d. e f d/ 6d0 d1 e f d2 6d3 d4 e f d5 6d6 d7 e f d8 6d9 d: e f d; 6d"d> 6d#dA 6d$dD 6d%dG 6d&dJ 6d'dM 6d(dP 6d)dS 6d*dV 6d+dY 6dZ d[ e f d\ 6d] d^ e f d_ 6d` da e f db 6dc dd e f de 6df dg e f dh 6di dj e f dk 6dl dm e f dn 6do dp e f dq 6dr ds e f dt 6du dv e f dw 6dx dy e f dz 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 6d-d 6d.d 6d/d 6d0d 6d1d 6d2d 6d3d 6d4d 6d5d 6d6d 6d7d 6d8d 6d9d 6d d e f d 6Z d   Z d e j f d     YZ d   Z d   Z d   Z  i d d 6d d 6d d 6d d 6d d 6d d 6d d 6Z! d:Z" i d d;6d d<6d d=6Z# d  Z$ d  Z% d  Z& d  Z' 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(>  iN(   t   unpack_from(   t   Imaget	   ImageFilet   TiffImagePlugint   _binary(   t   presets(   t   isStringTypes   0.6c         C   s3   t  |  j j d   d } t j |  j |  d  S(   Ni   (   t   i16t   fpt   readR   t
   _safe_read(   t   selft   markert   n(    (    s5   /tmp/pip-unpacked-wheel-ivxKtu/PIL/JpegImagePlugin.pyt   Skip7   s    c   	      C   s\  t  |  j j d   d } t j |  j |  } d | d @} | |  j | <|  j j | | f  | d k r#| d  d k r#t  | d  |  j d <} t	 | d	  |  j d
 <y2 t
 | d  } t  | d  t  | d  f } Wn qXX| d k r| |  j d <n  | |  j d <| |  j d <n5| d k rO| d  d k rO| |  j d <n	| d k r{| d  d k r{| |  j d <n | d k r| d  d k r|  j j |  n | d k r
| d  d k r
t  | d  |  j d <y t
 | d  } Wn qXX| |  j d <nN | d k rX| d  d k rX| d |  j d <|  j j   | d |  j d  <n  d  S(!   Ni   s   APP%di   i  i   t   JFIFi   t   jfifi   t   jfif_versioni   i   i
   i   t   dpit	   jfif_unitt   jfif_densityi  s   Exif t   exifi  s   FPXR t   flashpixi   s   ICC_PROFILE i  t   Adobet   adobet   adobe_transforms   MPF t   mpt   mpoffset(   R   R   R	   R   R
   t   appt   applistt   appendt   infot   divmodt   i8t   icclistt   tell(	   R   R   R   t   sR   t   versionR   R   R   (    (    s5   /tmp/pip-unpacked-wheel-ivxKtu/PIL/JpegImagePlugin.pyt   APP<   sB    "c         C   sX   t  |  j j d   d } t j |  j |  } | |  j d <|  j j d | f  d  S(   Ni   t   COM(   R   R   R	   R   R
   R   R   R   (   R   R   R   R$   (    (    s5   /tmp/pip-unpacked-wheel-ivxKtu/PIL/JpegImagePlugin.pyR'   |   s    c   	      C   s@  t  |  j j d   d } t j |  j |  } t  | d  t  | 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 r*d |  j d <|  j d <n  |  j r|  j j   t |  j d d  t |  j  k rg  } x" |  j D] } | j | d  qvWd j |  } n d  } | |  j d <d  |  _ n  xw t d t |  d  D]] } | | | d !} |  j j | d t | d  d t | d  d @t | d  f  qWd  S(   Ni   i   i   i    i   s   cannot handle %d-bit layersi   t   Lt   RGBi   t   CMYKs   cannot handle %d-layer imagesi  i  i  i  t   progressivet   progressioni   i   t    t   icc_profilei   i   i   (   i  i  i  i  (   R   R   R	   R   R
   t   sizeR!   t   bitst   SyntaxErrort   layerst   modeR   R"   t   sortt   lenR   t   joint   Nonet   ranget   layer(	   R   R   R   R$   t   profilet   pR.   t   it   t(    (    s5   /tmp/pip-unpacked-wheel-ivxKtu/PIL/JpegImagePlugin.pyt   SOF   s:    #	&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 } q4 d  Sq4 Wd  S(	   Ni   iA   s   bad quantization table markeri    i   t   Bi   i   (
   R   R   R	   R   R
   R5   R1   R!   t   arrayt   quantization(   R   R   R   R$   t   v(    (    s5   /tmp/pip-unpacked-wheel-ivxKtu/PIL/JpegImagePlugin.pyt   DQT   s    	$t   SOF0s   Baseline DCTi  t   SOF1s   Extended Sequential DCTi  t   SOF2s   Progressive DCTi  t   SOF3s   Spatial losslessi  t   DHTs   Define Huffman tablei  t   SOF5s   Differential sequential DCTi  t   SOF6s   Differential progressive DCTi  t   SOF7s   Differential spatiali  t   JPGt	   Extensioni  t   SOF9s   Extended sequential DCT (AC)i  t   SOF10s   Progressive DCT (AC)i  t   SOF11s   Spatial lossless DCT (AC)i  t   DACs%   Define arithmetic coding conditioningi  t   SOF13s    Differential sequential DCT (AC)i  t   SOF14s!   Differential progressive DCT (AC)i  t   SOF15s   Differential spatial (AC)i  t   RST0s	   Restart 0i  t   RST1s	   Restart 1i  t   RST2s	   Restart 2i  t   RST3s	   Restart 3i  t   RST4s	   Restart 4i  t   RST5s	   Restart 5i  t   RST6s	   Restart 6i  t   RST7s	   Restart 7i  t   SOIs   Start of imagei  t   EOIs   End of imagei  t   SOSs   Start of scani  RC   s   Define quantization tablei  t   DNLs   Define number of linesi  t   DRIs   Define restart intervali  t   DHPs   Define hierarchical progressioni  t   EXPs   Expand reference componenti  t   APP0s   Application segment 0i  t   APP1s   Application segment 1i  t   APP2s   Application segment 2i  t   APP3s   Application segment 3i  t   APP4s   Application segment 4i  t   APP5s   Application segment 5i  t   APP6s   Application segment 6i  t   APP7s   Application segment 7i  t   APP8s   Application segment 8i  t   APP9s   Application segment 9i  t   APP10s   Application segment 10i  t   APP11s   Application segment 11i  t   APP12s   Application segment 12i  t   APP13s   Application segment 13i  t   APP14s   Application segment 14i  t   APP15s   Application segment 15i  t   JPG0s   Extension 0i  t   JPG1s   Extension 1i  t   JPG2s   Extension 2i  t   JPG3s   Extension 3i  t   JPG4s   Extension 4i  t   JPG5s   Extension 5i  t   JPG6s   Extension 6i  t   JPG7s   Extension 7i  t   JPG8s   Extension 8i  t   JPG9s   Extension 9i  t   JPG10s   Extension 10i  t   JPG11s   Extension 11i  t   JPG12s   Extension 12i  t   JPG13s   Extension 13i  R'   t   Commenti  c         C   s   |  d d !d k S(   Ni    i   s   (    (   t   prefix(    (    s5   /tmp/pip-unpacked-wheel-ivxKtu/PIL/JpegImagePlugin.pyt   _accept  s    t   JpegImageFilec           B   sA   e  Z d  Z d Z d   Z d   Z d   Z d   Z d   Z RS(   t   JPEGs   JPEG (ISO 10918)c         C   s  |  j  j d  } t |  d k r3 t d   n  d |  _ |  _ g  |  _ i  |  _ i  |  _ i  |  _	 i  |  _
 g  |  _ g  |  _ xPt rt |  } | d k r | |  j  j d  } t |  } n |  j  j d  } q | t k rt | \ } } } | d  k	 r| |  |  n  | d k rn|  j } |  j d k rE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(   Ni   i   s   not a JPEG filei    i  R*   s   CMYK;It   jpegR-   i  s   i   s   no marker found(   i    i    (   R   R	   R!   R1   R0   R2   R9   t
   huffman_dct
   huffman_acRA   R   R   R"   t   TrueR   t   MARKERR7   R3   R/   t   tile(   R   R$   R<   t   namet   descriptiont   handlert   rawmode(    (    s5   /tmp/pip-unpacked-wheel-ivxKtu/PIL/JpegImagePlugin.pyt   _open  sF    											c   	      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(   Ni   i    R)   R(   t   YCbCrR-   i   i   i   i   (   R(   R   (   R5   R   R3   t   maxR/   t   decoderconfig(	   R   R3   R/   t   dt   et   ot   at   scaleR$   (    (    s5   /tmp/pip-unpacked-wheel-ivxKtu/PIL/JpegImagePlugin.pyt   draftS  s$    	-Z5	c         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 n XX|  j j |  _ |  j j |  _ g  |  _ d  S(   Nit   djpegs   -outfiles   Invalid Filename(   t
   subprocesst   tempfilet   ost   mkstempt   closet   patht   existst   filenamet
   check_callt
   ValueErrorR   t   opent   loadt   imt   unlinkt   OSErrorR3   R/   R   (   R   R   R   R   t   fR   t   _im(    (    s5   /tmp/pip-unpacked-wheel-ivxKtu/PIL/JpegImagePlugin.pyt
   load_djpegm  s&    
c         C   s
   t  |   S(   N(   t   _getexif(   R   (    (    s5   /tmp/pip-unpacked-wheel-ivxKtu/PIL/JpegImagePlugin.pyR     s    c         C   s
   t  |   S(   N(   t   _getmp(   R   (    (    s5   /tmp/pip-unpacked-wheel-ivxKtu/PIL/JpegImagePlugin.pyR     s    (	   t   __name__t
   __module__t   formatt   format_descriptionR   R   R   R   R   (    (    (    s5   /tmp/pip-unpacked-wheel-ivxKtu/PIL/JpegImagePlugin.pyR     s   	4			c         C   s>   d   } t  g  |  j   D] \ } } | | |  f ^ q  S(   Nc         S   s<   y. t  |   d k r- t |  t  r- |  d SWn n X|  S(   Ni   i    (   R5   t
   isinstancet   dict(   t   value(    (    s5   /tmp/pip-unpacked-wheel-ivxKtu/PIL/JpegImagePlugin.pyt   _fixup  s    " (   R   t   items(   t   src_dictR   t   kRB   (    (    s5   /tmp/pip-unpacked-wheel-ivxKtu/PIL/JpegImagePlugin.pyt   _fixup_dict  s    	c         C   s3  y |  j  d } Wn t k
 r% d  SXt j | d  } | j d  } t j |  } | j |  t	 t
 |   } y | j | d  Wn t t f k
 r n0 Xt j |  } | j |  | j t
 |   y | j | d  Wn t t f k
 rn- Xt j |  } | j |  t
 |  | d <| S(   NR   i   i   ii  i%  (   R   t   KeyErrorR7   t   iot   BytesIOR	   R   t   ImageFileDirectory_v1R   R   R   t   seekt	   TypeErrort   update(   R   t   datat   filet   headR   R   (    (    s5   /tmp/pip-unpacked-wheel-ivxKtu/PIL/JpegImagePlugin.pyR     s0    c         C   sq  y |  j  d } Wn t k
 r% d  SXt j |  } | j d  } | d  d k rZ d n d } y, t j |  } | j |  t	 |  } Wn t
 d   n Xy | d } Wn t k
 r t
 d	   n 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
 rlt
 d2   n X| S(9   NR   i   i   s   MM *t   >t   <s)   malformed MP Index (unreadable directory)i  s(   malformed MP Index (no number of images)i  i    s   {0}LLLHHi   t	   Attributet   Sizet
   DataOffsett   EntryNo1t   EntryNo2i   i   t   DependentParentImageFlagi   t   DependentChildImageFlagi   t   RepresentativeImageFlagi   i   t   Reservedi   i   t   ImageDataFormati t   MPTypeR   s!   unsupported picture format in MPOt	   Undefineds    Large Thumbnail (VGA Equivalent)i  s$   Large Thumbnail (Full HD Equivalent)i  s   Multi-Frame Image (Panorama)i  s   Multi-Frame Image: (Disparity)i  s    Multi-Frame Image: (Multi-Angle)i  s   Baseline MP Primary Imagei   t   Unknowns!   malformed MP Index (bad MP Entry)(   R   R   R   R   R   I       i   @i    i   i   (   R   R   R7   R   R   R	   R   t   ImageFileDirectory_v2R   R   R1   R8   R    R   t   zipt   boolt   getR   (   R   R   t   file_contentsR   t
   endiannessR   R   t   quantt	   mpentriest   rawmpentriest   entrynumt   unpackedentryt   labelst   mpentryt   mpentryattrt	   mptypemap(    (    s5   /tmp/pip-unpacked-wheel-ivxKtu/PIL/JpegImagePlugin.pyR     sn    
 




R(   t   1R)   t   RGBAt   RGBXs   CMYK;IR*   R   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,   i5   i
   i   i   i    i'   i-   i4   i6   i   i   i!   i&   i.   i3   i7   i<   i   i"   i%   i/   i2   i8   i;   i=   i#   i$   i0   i1   i9   i:   i>   i?   c         C   sw   g  t  t |    D] } | |  k r |  | ^ q }  x; t |   D]- \ } } g  t D] } | | ^ qU |  | <qB W|  S(   N(   R8   R5   t	   enumeratet   zigzag_index(   t   qtablest   keyt   idxt   tableR<   (    (    s5   /tmp/pip-unpacked-wheel-ivxKtu/PIL/JpegImagePlugin.pyt   convert_dict_qtables0  s    5%c         C   sk   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(	   NR2   i   i   ii    i   i   (   i   i   (   t   hasattrR2   R9   t	   samplingsR   (   R   t   sampling(    (    s5   /tmp/pip-unpacked-wheel-ivxKtu/PIL/JpegImagePlugin.pyt   get_sampling7  s    8c         C   s  y t  |  j } Wn$ t k
 r7 t d |  j   n X|  j d k rZ t j d t  n  |  j } g  | j d d%  D] } t	 t
 |   ^ qv } | 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	  sFt d   nS | t k rk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
 k rY|  j d k rDt d   n  t |  d d   }	 n  | |	  }	 d } | j d  } | r8d } d } | | } g  } x% | r| j | |   | | } qWd } xk | D]` } t j d d | t |   } | d | d t |  t t |   | 7} | d 7} qWn  | j d t  pY| j d t  } | j d t  } | | | 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('   Ns   cannot write mode %s as JPEGR   s   You 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.R   i    t   qualityt   subsamplingiR   t   keepRA   s   Invalid quality settings   4:4:4s   4:2:2i   s   4:1:1i   R   s3   Cannot use 'keep' when original image is not a JPEGc         S   s  |  d  k r |  St |   r yL g  |  j   D]5 } | j d d  d j   D] } t |  ^ qL q, } Wn t k
 r t d   q Xg  t d t |  d  D] } | | | d !^ q }  n  t |  t	 t
 t f  rt |  t  r t |   }  n t |  t	  rt
 |   }  n  d t |   k  o2d k  n sFt d   n  xx t |   D]j \ } } y. t |  d k rz  n  t j d |  } Wn t k
 rt d   qSXt
 |  |  | <qSW|  Sd  S(	   Nt   #i   i    s   Invalid quantization tablei@   i   s$   None or too many quantization tablesR?   (   R7   R   t
   splitlinest   splitt   intR   R8   R5   R   t   tuplet   listR   R   R   R@   R   (   R   t   linet   numt   linesR$   R   R   (    (    s5   /tmp/pip-unpacked-wheel-ivxKtu/PIL/JpegImagePlugin.pyt   validate_qtablesy  s2    99"R-   R.   i   i  s   >Hs   s   ICC_PROFILE R+   R,   t   optimizet   smootht
   streamtypeR   i_   i   R   (   i    i    (   i    i    (   t   RAWMODER3   R   t   IOErrort   warningst   warnt   DeprecationWarningt   encoderinfoR   R   t   roundR   R   R   R   R   R   t   getattrR7   R   t   structt   packR5   t   o8t   Falset   encoderconfigR/   R   R   t   MAXBLOCKt   _save(   R   R   R   R   R   t   xR   R   R   R   t   presetR   t   extraR.   t   ICC_OVERHEAD_LENt   MAX_BYTES_IN_MARKERt   MAX_DATA_BYTES_IN_MARKERt   markersR<   R   R/   R+   R   t   bufsize(    (    s5   /tmp/pip-unpacked-wheel-ivxKtu/PIL/JpegImagePlugin.pyR  E  s    
	1	
				
	 -+c         C   sf   d d  l  } d d  l } |  j   } | j d d | | g  y | j |  Wn t k
 ra n Xd  S(   Nit   cjpegs   -outfile(   R   R   t   _dumpR   R   R   (   R   R   R   R   R   R   (    (    s5   /tmp/pip-unpacked-wheel-ivxKtu/PIL/JpegImagePlugin.pyt   _save_cjpeg  s    c         C   s   t  |  |  } yB | j   } | d d k rP d d l m } | |  |  } n  Wn4 t t f k
 rj n t k
 r t j d  n X| S(   Ni  i   (   t   MpoImageFilesT   Image appears to be a malformed MPO file, it will be interpreted as a base JPEG file(	   R   R   t   MpoImagePluginR  R   t
   IndexErrorR1   R  R  (   R   R   R   t   mpheaderR  (    (    s5   /tmp/pip-unpacked-wheel-ivxKtu/PIL/JpegImagePlugin.pyt   jpeg_factory  s    s   .jfifs   .jpes   .jpgs   .jpegs
   image/jpeg(   RL   RM   N(   RU   s	   Restart 0N(   RV   s	   Restart 1N(   RW   s	   Restart 2N(   RX   s	   Restart 3N(   RY   s	   Restart 4N(   RZ   s	   Restart 5N(   R[   s	   Restart 6N(   R\   s	   Restart 7N(   R]   s   Start of imageN(   R^   s   End of imageN(   Rt   s   Extension 0N(   Ru   s   Extension 1N(   Rv   s   Extension 2N(   Rw   s   Extension 3N(   Rx   s   Extension 4N(   Ry   s   Extension 5N(   Rz   s   Extension 6N(   R{   s   Extension 7N(   R|   s   Extension 8N(   R}   s   Extension 9N(   R~   s   Extension 10N(   R   s   Extension 11N(   R   s   Extension 12N(   R   s   Extension 13N(@   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,   i5   i
   i   i   i    i'   i-   i4   i6   i   i   i!   i&   i.   i3   i7   i<   i   i"   i%   i/   i2   i8   i;   i=   i#   i$   i0   i1   i9   i:   i>   i?   (   i   i   i   i   i   i   (   i   i   i   i   i   i   (   i   i   i   i   i   i   (.   R@   R
  R   R  R    t   PILR   R   R   R   t   PIL.JpegPresetsR   t	   PIL._utilR   R!   R  t   i16beR   t   i32bet   i32t   __version__R   R&   R'   R>   RC   R7   R   R   R   R   R   R   R  R   R   R   R   R  R  R   t   register_openR   t   register_savet   register_extensiont   register_mime(    (    (    s5   /tmp/pip-unpacked-wheel-ivxKtu/PIL/JpegImagePlugin.pyt   <module>#   s   "						@	
	0		w		-	L
       

				