
4ec        @   @  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 m Z d d l m Z d d l m 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/ 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@ 6d#dC 6d$dF 6d%dI 6d&dL 6d'dO 6d(dR 6d)dU 6d*dX 6d+d[ 6d\ d] e f d^ 6d_ d` e f da 6db dc e f dd 6de df e f dg 6dh di e f dj 6dk dl e f dm 6dn do e f dp 6dq dr e f ds 6dt du e f dv 6dw dx e f dy 6dz 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 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 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dddg  e j. e j+ d  d S(>  i(   t   print_functionNi   (   t   Imaget	   ImageFilet   TiffImagePlugin(   t   i8t   i16bet   i32bet   o8(   t   isStringType(   t   presetss   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(    (    s=   /usr/local/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyt   Skip8   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 t k
 r qX| d k r| |  j d <n  | |  j d <| |  j d <n| d k rk| d  d k rkd |  j k r| |  j d <q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| d } d }	 i  }
 x/| |	 |	 d !d k r)|	 d 7}	 t  | |	  } |	 d 7}	 t
 | |	  } d |	 | }	 |	 d @rj|	 d 7}	 n  t | |	  } |	 d 7}	 | |	 |	 | !} | d k ri t | d   d  d! 6t  | d d ! d" 6t | d d ! d  d# 6t  | d  d$ 6} n  | |
 | <|	 | }	 |	 d @r|	 d 7}	 qqW|
 |  j d% <qn | d& k r| d  d' k rt  | d  |  j d( <y t
 | d  } Wn t k
 rqX| |  j d) <nN | d k r| d  d* k r| d |  j d+ <|  j j   | d |  j d, <n  d |  j k rd |  j k ry |  j   } | d- } | d. } y t | d  | d } Wn t k
 rk| } n X| d/ k r| d0 9} n  t | d1  t | d1  f |  j d <Wqt t t f k
 rd3 |  j d <qXn  d  S(4   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  i   s   Photoshop 3.0 i    t   8BIMi  i   t   XResolutiont   DisplayedUnitsXt   YResolutiont   DisplayedUnitsYt	   photoshopi  t   Adobet   adobet   adobe_transforms   MPF t   mpt   mpoffseti(  i  i   gRQ@g      ?iH   (   iH   iH   (   R
   R   R   R   R   t   appt   applistt   appendt   infot   divmodR   t	   Exceptiont   icclistt   i32t   tellt   getexift   floatt	   TypeErrort   intt   KeyErrort   SyntaxErrort   ZeroDivisionError(   R   R   R   t   sR%   t   versionR   R   t   blockst   offsetR   t   codet   name_lent   sizet   dataR"   R   t   resolution_unitt   x_resolutionR   (    (    s=   /usr/local/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyt   APP=   s    "







!


+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   R5   (    (    s=   /usr/local/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   bitsR3   t   layerst   modeR(   R+   t   sortt   lenR'   t   joint   Nonet   ranget   layer(	   R   R   R   R5   t   profilet   pRG   t   it   t(    (    s=   /usr/local/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   RM   R3   R   t   arrayt   quantization(   R   R   R   R5   t   v(    (    s=   /usr/local/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  R[   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(    (    s=   /usr/local/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyt   _acceptJ  s    t   JpegImageFilec           B  sJ   e  Z d  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  RC   s   CMYK;It   jpegRF   i  s   i   s   no marker found(   i    i    (   R   R   R   R3   RI   RJ   RQ   t
   huffman_dct
   huffman_acRY   R%   R&   R+   t   TrueR
   t   MARKERRO   RK   R;   t   tile(   R   R5   RT   t   namet   descriptiont   handlert   rawmode(    (    s=   /usr/local/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyt   _openW  sD    										%	c         C  s*   |  j  j |  } | r& t j r& d S| S(   s   
        internal: read more image data
        For premature EOF and LOAD_TRUNCATED_IMAGES adds EOI marker
        so libjpeg can finish decoding
        s   (   R   R   R   t   LOAD_TRUNCATED_IMAGES(   R   t
   read_bytesR5   (    (    s=   /usr/local/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyt	   load_read  s    c   	      C  s  t  |  j  d k r d  S|  j r& d  S|  j d \ } } } } d } | d d k ry | d k ry | |  _ | d f } n  | rq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    RB   RA   t   YCbCrRF   i   i   i   i   (   RA   R   (   RM   R   t   decoderconfigRK   t   minR;   RH   (	   R   RK   R;   t   dt   et   ot   at   scaleR5   (    (    s=   /usr/local/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyt   draft  s.    		-#)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   OSErrorRK   R;   RH   R   (   R   R   R   R   t   fR   t   _im(    (    s=   /usr/local/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyt
   load_djpeg  s&    
c         C  s
   t  |   S(   N(   t   _getexif(   R   (    (    s=   /usr/local/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyR     s    c         C  s
   t  |   S(   N(   t   _getmp(   R   (    (    s=   /usr/local/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyR     s    (
   t   __name__t
   __module__t   formatt   format_descriptionR   R   R   R   R   R   (    (    (    s=   /usr/local/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyR   R  s   	2		#		c         C  s   t  j   } | j |   S(   N(   R   t   Exift   _fixup_dict(   t   src_dictR   (    (    s=   /usr/local/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyR     s    c         C  s#   d |  j  k r d  St |  j    S(   NR   (   R(   RO   t   dictR.   (   R   (    (    s=   /usr/local/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 } y< t j |  } | j | j	  | j
 |  t |  } Wn t k
 r t d   n Xy | d } Wn t k
 r t d	   n Xg  } yz| d
 }	 x_t d |  D]N}
 t j 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
 r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   {}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(   R2   RO   t   iot   BytesIOR   R   t   ImageFileDirectory_v2t   seekt   nextR   R   R*   R3   RP   t   structt   unpack_fromR   t   zipt   boolt   getR'   (   R   R<   t   file_contentst   headt
   endiannessR(   R#   t   quantt	   mpentriest   rawmpentriest   entrynumt   unpackedentryt   labelst   mpentryt   mpentryattrt	   mptypemap(    (    s=   /usr/local/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyR     sf    


RA   t   1RB   t   RGBXs   CMYK;IRC   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,   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(   RP   RM   t	   enumeratet   zigzag_index(   t   qtablest   keyt   idxt   tableRT   (    (    s=   /usr/local/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyt   convert_dict_qtablesS  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(	   NRJ   i   i   ii    i   i   (   i   i   (   t   hasattrRJ   RQ   t	   samplingsR   (   R   t   sampling(    (    s=   /usr/local/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyt   get_samplingZ  s    8c         C  s  y t  |  j } Wn$ t k
 r7 t d |  j   n X|  j } g  | j d d&  D] } t t |   ^ qT } | 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 rIt | j d d  } n  t |	  rw|	 t k rwt |	 j d	  }	 n  | d k rd } nx | 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 rL|  j d k r7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  | j d t  pL| j d t  } | j d t  } | j d d  } t	 | t j  r| j   } n  | | | j d d  | | j d  d  | d | d | |	 | | f |  _ d } | s| rp|  j d! k rd" |  j d |  j d } qp| d# k s6| d k rUd |  j d |  j d } qp|  j d |  j d } n  t t j | t |  d$ t |  d  } t j |  | d% d' |  j d | f g |  d  S((   Ns   cannot write mode %s as JPEGR   i    t   qualityt   subsamplingiR   t   keepRY   s   Invalid quality settings   4:4:4s   4:2:2i   s   4:2:0i   s   4:1:1R   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  x{ t |   D]m \ } } y1 t |  d k r}t  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 tablesRW   (   RO   R   t
   splitlinest   splitR1   R   RP   RM   t
   isinstancet   tuplet   listR   R   R   R0   RX   (   R   t   linet   numt   linesR5   R   R   (    (    s=   /usr/local/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyt   validate_qtables  s4    99"	RF   RG   i   i  s   >Hs   s   ICC_PROFILE RD   RE   t   optimizeR   t   smootht
   streamtypeRC   i   i_   i   R   (   i    i    (   i    i    (   t   RAWMODERK   R2   t   IOErrort   encoderinfoR   R1   t   roundR	   R  R   R   R   R  t   getattrRO   R'   R   t   packRM   R   t   FalseR   R   t   tobytest   encoderconfigR;   t   maxR   t   MAXBLOCKt   _save(   R   R   R   R   R(   t   xR   R  R  R   t   presetR  t   extraRG   t   ICC_OVERHEAD_LENt   MAX_BYTES_IN_MARKERt   MAX_DATA_BYTES_IN_MARKERt   markersRT   R   R;   RD   R  R   t   bufsize(    (    s=   /usr/local/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyR   h  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   (    (    s=   /usr/local/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyt   _save_cjpeg  s    c         C  s   t  |  |  } yE | j   } | d d k rS d d l m } | j | |  } n  Wn4 t t f k
 rm 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,  t   adoptR0   t
   IndexErrorR3   t   warningst   warn(   R   R   R   t   mpheaderR,  (    (    s=   /usr/local/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyt   jpeg_factory  s    s   .jfifs   .jpes   .jpgs   .jpegs
   image/jpeg(   Rd   Re   N(   Rm   s	   Restart 0N(   Rn   s	   Restart 1N(   Ro   s	   Restart 2N(   Rp   s	   Restart 3N(   Rq   s	   Restart 4N(   Rr   s	   Restart 5N(   Rs   s	   Restart 6N(   Rt   s	   Restart 7N(   Ru   s   Start of imageN(   Rv   s   End of imageN(   R   s   Extension 0N(   R   s   Extension 1N(   R   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
   __future__R    RX   R   R   R0  RF   R   R   R   t   _binaryR   R   R
   R   R,   R   t   _utilR   t   JpegPresetsR	   t   __version__R   R?   R@   RV   R[   RO   R   R   R   R   R   R   R  R   R  R   R  R   R+  R3  t   register_openR   t   register_savet   register_extensionst   register_mime(    (    (    s=   /usr/local/lib/python2.7/dist-packages/PIL/JpegImagePlugin.pyt   <module>#   s   "		v	
	0					I
       
				