
 Xc        @   @   s!  d  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 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 6d0d 6d1d 6d2d 6d3d 6d4d 6d5d 6d6d 6d7d 6d8d 6d9d 6d: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( de' e  e j) de%  e j* dd e j* dd e j* dd e j* dd  e j+ dd! d S(?  s   0.6iN(   t   unpack(   t   Imaget	   ImageFilet   TiffImagePlugint   _binary(   t   presets(   t   isStringTypec         C   s3   t  |  j j d   d } t j |  j |  d  S(   Ni   (   t   i16t   fpt   readR   t
   _safe_read(   t   selft   markert   n(    (    s7   /usr/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyt   Skip6   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  t   Exif t   exifi  t   FPXR t   flashpixi   t   ICC_PROFILE i  t   Adobet   adobet   adobe_transformt   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   (    (    s7   /usr/lib/python2.7/dist-packages/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(   (    (    s7   /usr/lib/python2.7/dist-packages/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   pR2   t   it   t(    (    s7   /usr/lib/python2.7/dist-packages/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
   R9   R5   R%   t   arrayt   quantization(   R   R   R   R(   t   v(    (    s7   /usr/lib/python2.7/dist-packages/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  RG   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(    (    s7   /usr/lib/python2.7/dist-packages/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  d k r7 t d   n  d |  _ |  _ g  |  _ i  |  _ i  |  _ i  |  _	 i  |  _
 g  |  _ g  |  _ x#t rt |  } | d k r | |  j  j d  } t |  } n	 d } q | t k r{t | \ } } } | d  k	 r| |  |  n  | d k rf|  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 t d   q Wd  S(   Ni   i    i   s   not a JPEG files   i  R.   s   CMYK;It   jpegR1   i  s   no marker found(   i    i    (   R   R	   R%   R5   R4   R6   R=   t
   huffman_dct
   huffman_acRE   R    R!   R&   t   TrueR   t   MARKERR;   R7   R3   t   tile(   R   R(   R@   t   namet   descriptiont   handlert   rawmode(    (    s7   /usr/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyt   _open  sB    											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   YCbCrR1   i   i   i   i   (   R,   R   (   R9   R   R7   t   maxR3   t   decoderconfig(	   R   R7   R3   t   dt   et   ot   at   scaleR(   (    (    s7   /usr/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyt   draftP  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 |  |  _ Wd  y | j |  Wn 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   coret   open_ppmt   imt   unlinkR7   R3   R   (   R   R   R   R   t   fR   (    (    s7   /usr/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyt
   load_djpegj  s"    c         C   s
   t  |   S(   N(   t   _getexif(   R   (    (    s7   /usr/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyR     s    c         C   s
   t  |   S(   N(   t   _getmp(   R   (    (    s7   /usr/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyR     s    (	   t   __name__t
   __module__t   formatt   format_descriptionR   R   R   R   R   (    (    (    s7   /usr/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyR     s   	2			c         C   s   t  |   d k r |  d S|  S(   Ni   i    (   R9   (   t   value(    (    s7   /usr/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyt   _fixup  s    c   	      C   s  y |  j  d } Wn t k
 r% d  SXt j | d  } | j d  } i  } t j |  } | j |  x* | j	   D] \ } } t
 |  | | <qw Wy | j | d  Wn t k
 r nJ Xt j |  } | j |  x* | j	   D] \ } } t
 |  | | <q Wy | j | d  Wn t k
 r1nX Xt j |  } | j |  i  | d <} x* | j	   D] \ } } t
 |  | | <qiW| S(   NR   i   i   ii  i%  (   R#   t   KeyErrorR;   t   iot   BytesIOR	   R   t   ImageFileDirectoryt   loadt   itemsR   t   seek(	   R   t   datat   filet   headR   R#   t   keyR   t   gps(    (    s7   /usr/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyR     s:    c         C   s  y |  j  d } Wn t k
 r% d  SXt j |  } | j d  } | d  d k rZ d n d } i  } t j |  } | j |  x* | j	   D] \ } } t
 |  | | <q Wy | d }	 Wn t k
 r t d   n Xyg  }
 xrt d	 |	  D]a} | d
 | d | d d !} t d j |  |  } d2 } t t | |   } i t | d d3 @ d 6t | d d4 @ d 6t | d d5 @ d 6| d d6 @d ?d 6| d d7 @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. d/ 6} | j | d  d0  | d  <| | d <|
 j |  q W|
 | d
 <Wn t k
 rt d1   n X| S(8   NR   i   i   t   MM *t   >t   <i  s(   malformed MP Index (no number of images)i    i  i   i   s   {0}LLLHHt	   Attributet   Sizet
   DataOffsett   EntryNo1t   EntryNo2i   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   R;   R   R   R	   R   R   R   R   R   R5   R<   R    R   t   dictt   zipt   boolt   getR"   (   R   R   R   R   t
   endiannessR   R#   R   R   t   quantt	   mpentriest   entrynumt
   rawmpentryt   unpackedentryt   labelst   mpentryt   mpentryattrt	   mptypemap(    (    s7   /usr/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyR     sj     




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(   R<   R9   t	   enumeratet   zigzag_index(   t   qtablesR   t   idxt   tableR@   (    (    s7   /usr/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyt   convert_dict_qtables!  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(	   NR6   i   i   ii    i   i   (   i   i   (   t   hasattrR6   R=   t	   samplingsR   (   R   t   sampling(    (    s7   /usr/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyt   get_sampling(  s    8c         C   s0  y t  |  j } Wn$ t k
 r7 t d |  j   n X|  j } | j 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  st	 d
   nS | t k r*t | j d d  } n  t
 |  rX| t k rXt | j d	  } n  | d k rm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 r|  j d k rt	 d   n  t |  d	 d   } n  |
 |  } d } | j d  } | r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  | d | k pd | k | j d d  d | k | j d d  | d | d | | | | j d d  f |  _ d } d | k sd | k sd | k r| 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   i    t   qualityt   subsamplingiR   t   keepRE   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 tablesRC   (   R;   R   t
   splitlinest   splitt   intR   R<   R9   t
   isinstancet   tuplet   listR   R   R   RD   t	   TypeError(   R   t   linet   numt   linesR(   R   R   (    (    s7   /usr/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyt   validate_qtablesb  s2    99"R1   R2   i   i  s   >Hs   R   R/   R0   t   smootht   optimizet
   streamtypeR   i_   i   R   (   i    i    (   i    i    (   t   RAWMODER7   R   t   IOErrort   encoderinfoR   R   R   R   R   R   R   R   t   getattrR;   R"   t   structt   packR9   t   o8t   encoderconfigR3   R   R   t   MAXBLOCKt   _save(   R   R   R   R   R#   R   R   R   R   t   presetR   t   extraR2   t   ICC_OVERHEAD_LENt   MAX_BYTES_IN_MARKERt   MAX_DATA_BYTES_IN_MARKERt   markersR@   R   R3   t   bufsize(    (    s7   /usr/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyR
  6  s    		
				
	 -	$+c         C   s\   d d  l  } d d  l } |  j   } | j d d | | g  y | j t  Wn n Xd  S(   Nit   cjpegs   -outfile(   R   R   t   _dumpR   R   R   (   R   R   R   R   R   R   (    (    s7   /usr/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyt   _save_cjpeg  s    c         C   so   t  |  |  } | j   } y6 | d d k rP d d l m } | |  |  } n  Wn t t f k
 rj n X| S(   Ni  i   (   t   MpoImageFile(   R   R   t   MpoImagePluginR  R   t
   IndexError(   R   R   R   t   mpheaderR  (    (    s7   /usr/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyt   jpeg_factory  s    R   s   .jfifs   .jpes   .jpgs   .jpegs
   image/jpeg(   RP   RQ   N(   RY   s	   Restart 0N(   RZ   s	   Restart 1N(   R[   s	   Restart 2N(   R\   s	   Restart 3N(   R]   s	   Restart 4N(   R^   s	   Restart 5N(   R_   s	   Restart 6N(   R`   s	   Restart 7N(   Ra   s   Start of imageN(   Rb   s   End of imageN(   Rx   s   Extension 0N(   Ry   s   Extension 1N(   Rz   s   Extension 2N(   R{   s   Extension 3N(   R|   s   Extension 4N(   R}   s   Extension 5N(   R~   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   (,   t   __version__RD   R  R   R    t   PILR   R   R   R   t   PIL.JpegPresetsR   t	   PIL._utilR   R%   R  t   i16beR   t   i32bet   i32R   R*   R+   RB   RG   R;   R   R   R   R   R   R   R  R   R   R   R   R
  R  R  t   register_opent   register_savet   register_extensiont   register_mime(    (    (    s7   /usr/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyt   <module>#   s   "						@	
	0		s		+	J
       

				