ó
î Xc           @   s3  d  Z  d d l m Z m Z m Z m Z e j Z e j Z e j	 Z	 e j
 Z d „  Z d e j f d „  ƒ  YZ y d d l Z Wn e k
 r— d Z n Xi d d 6d d 6d	 d	 6Z d
 „  Z d „  Z d d d „ Z d d „ Z e j e j e e ƒ e j e j e ƒ e j e j d ƒ e j e j d ƒ d S(   s   0.9iÿÿÿÿ(   t   Imaget	   ImageFilet   ImagePalettet   _binaryc         C   s   |  d  d k S(   Ni   t   GIF87at   GIF89a(   R   R   (    (   t   prefix(    (    s6   /usr/lib/python2.7/dist-packages/PIL/GifImagePlugin.pyt   _accept.   s    t   GifImageFilec           B   sG   e  Z d  Z d Z d Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(   t   GIFs   Compuserve GIFc         C   s>   |  j  j d ƒ } | r: t | ƒ r: |  j  j t | ƒ ƒ Sd  S(   Ni   (   t   fpt   readt   i8t   None(   t   selft   s(    (    s6   /usr/lib/python2.7/dist-packages/PIL/GifImagePlugin.pyt   data<   s    c         C   s  |  j  j d ƒ } | d  d k r1 t d ƒ ‚ n  | d  |  j d <t | d ƒ t | d ƒ f |  _ g  |  _ t | d ƒ } | d	 @d
 } | d @r`t | d ƒ |  j d <|  j  j d | >ƒ } xš t d t	 | ƒ d ƒ D]} } | d t | | ƒ k o.t | | d
 ƒ k o.t | | d ƒ k n sÜ t
 j d | ƒ } | |  _ |  _ PqÜ qÜ Wn  |  j  |  _ |  j  j ƒ  |  _ |  j d ƒ d  S(   Ni   i   R   R   s   not a GIF filet   versioni   i
   i   i   i€   i   t
   backgroundi   i    i   t   RGB(   s   GIF87as   GIF89a(   R
   R   t   SyntaxErrort   infot   i16t   sizet   tileR   t   ranget   lenR   t   rawt   global_palettet   palettet   _GifImageFile__fpt   tellt   _GifImageFile__rewindt   seek(   R   R   t   flagst   bitst   pt   i(    (    s6   /usr/lib/python2.7/dist-packages/PIL/GifImagePlugin.pyt   _openB   s&    #	
Qc         C   sü  | d k rd d |  _  d  |  _ d d d d g |  _ d |  _ |  j j |  j ƒ d  |  _ d |  _	 n |  j
 sz |  j ƒ  n  | |  j d k r  t d | ƒ ‚ n  | |  _ g  |  _ |  j |  _ |  j  rù |  j j |  j  ƒ x |  j ƒ  rì qÝ Wd |  _  n  |  j r|  j
 j |  j |  j ƒ n  d d l m } | |  j ƒ |  _ xÍt r|  j j d ƒ } | sn| d k rrPqC| d k rÔ|  j j d ƒ } |  j ƒ  } t | ƒ d k r)t | d ƒ } | d @rât | d	 ƒ |  j d
 <n  t | d d	 !ƒ d |  j d <d | @} | d ?} | r¾| |  _	 q¾n• t | ƒ d k r¾| |  j j ƒ  f |  j d <| d  d k r¾|  j ƒ  } t | ƒ d	 k r»t | d ƒ d k r»t | d d	 !ƒ |  j d <q»q¾n  xK|  j ƒ  rÐqÁWqC| d k rC|  j j d ƒ } t | d ƒ t | d ƒ } } | t | d ƒ | t | d ƒ }	 }
 | | |	 |
 f |  _ t | d ƒ } | d @d k } | d @r±| d @d } t j d |  j j d	 | >ƒ ƒ |  _ n  t |  j j d ƒ ƒ } |  j j ƒ  |  _  d | | |	 |
 f |  j  | | f f g |  _ PqCqCWy˜ |  j	 d k  r.d  |  _ nU |  j	 d k ret j j d |  j  |  j d ƒ |  _ n |  j
 rƒ|  j
 j ƒ  |  _ n  |  j r§|  j j! |  j ƒ |  _ n  Wn t" t# f k
 rÁn X|  j sÚt$ d  ƒ ‚ n  d! |  _% |  j rød |  _% n  d  S("   Ni    iÿÿÿÿi   s   cannot seek to frame %d(   t   copyt   ;t   !iù   i   t   transparencyi
   t   durationi   i   iÿ   t	   extensioni   s   NETSCAPE2.0t   loopt   ,i	   i   i   i   i@   i€   i   R   t   gift   PR   s   no more images in GIF filet   L(&   t   _GifImageFile__offsetR   t   disposet   dispose_extentt   _GifImageFile__frameR   R!   R    t   _prev_imt   disposal_methodt   imt   loadt
   ValueErrorR   R
   R   t   pasteR'   R   R   t   TrueR   R   R   R   R   R   R   R   R    t   coret   fillR   t   cropt   AttributeErrort   KeyErrort   EOFErrort   mode(   R   t   frameR'   R   t   blockR"   t   dispose_bitst   x0t   y0t   x1t   y1t	   interlaceR#   (    (    s6   /usr/lib/python2.7/dist-packages/PIL/GifImagePlugin.pyR!   ^   s¦    										


(#!)
(					c         C   s   |  j  S(   N(   R5   (   R   (    (    s6   /usr/lib/python2.7/dist-packages/PIL/GifImagePlugin.pyR   ç   s    c         C   s„   t  j  j |  ƒ |  j rn |  j d k rn |  j j |  j ƒ } |  j j | |  j | j d ƒ ƒ |  j |  _ n  |  j j	 ƒ  |  _ d  S(   Ni   t   RGBA(
   R   t   load_endR6   R7   R8   R?   R4   R;   t   convertR'   (   R   t   updated(    (    s6   /usr/lib/python2.7/dist-packages/PIL/GifImagePlugin.pyRM   ê   s    N(   t   __name__t
   __module__t   formatt   format_descriptionR   R   R   R&   R!   R   RM   (    (    (    s6   /usr/lib/python2.7/dist-packages/PIL/GifImagePlugin.pyR   6   s   			‰	NR1   t   1R0   c         C   s_  t  r8 y t  j |  | | ƒ d  SWq8 t k
 r4 q8 Xn  |  j t k rP |  } nt t j |  j ƒ d k rµ d } |  j r— t |  j j	 ƒ  d ƒ d } n  |  j
 d d d d | ƒ} n |  j
 d ƒ } y |  j d } Wn3 t k
 r
d  } |  j j d	 t ƒ |  j d	 <n Xt | | |  j ƒ \ } } x | D] } | j | ƒ q-Wd
 }	 y |  j d }
 Wn t k
 rtd }
 n Xt |  j ƒ d k  r“d
 }
 n  |
 r¦|	 d B}	 n  y |  j d } Wn t k
 rÊnÉ Xt | ƒ } t } | d  k	 rAt | ƒ d k  rAxC t t | ƒ ƒ D], } | | | k r4| } t } Pqt } qWn  | r“| j d t d ƒ t d ƒ t d ƒ t d
 ƒ t | ƒ t d
 ƒ ƒ n  | j d t d
 ƒ t d
 ƒ t |  j d
 ƒ t |  j d ƒ t |	 ƒ t d ƒ ƒ d |
 f | _ t j | | d d |  j d
 t | j f g ƒ | j d ƒ | j d ƒ y | j ƒ  Wn n Xd  S(   NR   i   i   i   R0   R   t   colorsR1   t   optimizei    RK   i   i@   R*   R)   iù   i   R.   i   R/   t    R(   (   i    i    (   t   _imaging_gift   savet   IOErrorRC   t   RAWMODER    t   getmodebaseR   R   t   getdataRN   t   encoderinfoRA   R   t   getR<   t	   getheadert   writet   minR   t   intR   t   Falset   o8t   o16t   encoderconfigR   t   _savet   flush(   R8   R
   t   filenamet   imOutt   palette_sizeR   t   headert   usedPaletteColorsR   R"   RK   R*   t   transparentColorExistsR%   (    (    s6   /usr/lib/python2.7/dist-packages/PIL/GifImagePlugin.pyRh     sv    		  
	FCc         C   s  d d  l  } d d l m } m } m } m } d d  l } |  j ƒ  }	 |  j d k r˜ t	 | d ƒ / }
 | j
 ƒ  } | d |	 g d |
 d | ƒWd  QXnÖ t	 | d ƒ Å }
 d d	 |	 g } d g } | j
 ƒ  } | | d | d | ƒ} | j
 ƒ  } | | d
 | j d |
 d | ƒ} | j j ƒ  | j ƒ  } | rD| | | ƒ ‚ n  | j ƒ  } | rh| | | ƒ ‚ n  Wd  QXy | j |	 ƒ Wn n Xd  S(   Niÿÿÿÿ(   t   Popent
   check_callt   PIPEt   CalledProcessErrorR   t   wbt   ppmtogift   stdoutt   stderrt   ppmquantt   256t   stdin(   t   ost
   subprocessRp   Rq   Rr   Rs   t   tempfilet   _dumpRC   t   opent   TemporaryFileRv   t   closet   waitt   unlink(   R8   R
   Rj   R{   Rp   Rq   Rr   Rs   R}   t   filet   fRw   t	   quant_cmdt	   togif_cmdt
   quant_proct
   togif_proct   retcode(    (    s6   /usr/lib/python2.7/dist-packages/PIL/GifImagePlugin.pyt   _save_netpbmi  s6    "%		c         C   s  | o | j  d d ƒ } d t |  j d ƒ t |  j d ƒ g } |  j d k r | rt t | t ƒ rt | d  } qØ |  j j d ƒ d  } nK | r¯ t | t ƒ r¯ | d  } n) t g  t	 d ƒ D] } | d ^ q¿ ƒ } d } } | r4g  } d } x4 |  j ƒ  D]& }	 |	 r| j | ƒ n  | d 7} qWt | ƒ d	 k  r4d
 } i  }
 d } x? | D]7 } | | | d | d d !7} | |
 | <| d 7} qVWt |  j ƒ  ƒ } x, t	 t | ƒ ƒ D] } |
 | | | | <q¶W|  j t | ƒ ƒ | d t | ƒ d } |  j | ƒ t j d d | d t | ƒ ƒ|  _ q4n  | sC| } n  d d l } t | j | j t | ƒ d d ƒ ƒ ƒ d } | d k  r“d } n  | j t | d ƒ ƒ | j t d ƒ t d ƒ ƒ d | >t | ƒ d } | d k r| t d ƒ d | 7} n  | j | ƒ | | f S(   s2   Return a list of strings representing a GIF headerRV   i    R   i   R0   i   R   i   i   t    RW   R   R   iÿÿÿÿNi   i€   (   R_   Rf   R   RC   t
   isinstancet   bytesR8   t
   getpalettet	   bytearrayR   R   t	   histogramt   appendR   t   tobytest	   frombytest
   putpaletteR   R   t   mathRc   t   ceilt   logRe   (   R8   R   R   RV   Rm   t   sourcePaletteR%   Rn   t   paletteBytest   countt   newPositionst   oldPositiont
   imageBytest   newPaletteBytesR–   t   colorTableSizet   actualTargetSizeDiff(    (    s6   /usr/lib/python2.7/dist-packages/PIL/GifImagePlugin.pyR`   š  s`    )

	/	i    c         K   sà   d d
 d „  ƒ  Y} |  j  ƒ  | ƒ  } z© | |  _ | j d t | d ƒ t | d ƒ t |  j d ƒ t |  j d ƒ t d ƒ t d ƒ ƒ t j |  | d d |  j d t |  j	 f g ƒ | j d ƒ Wd	 |  ` X| j
 S(   s   Return a list of strings representing this image.
       The first string is a local image header, the rest contains
       encoded image data.t	   collectorc           B   s   e  Z g  Z d  „  Z RS(   c         S   s   |  j  j | ƒ d  S(   N(   R   R’   (   R   R   (    (    s6   /usr/lib/python2.7/dist-packages/PIL/GifImagePlugin.pyRa   ÷  s    (   RP   RQ   R   Ra   (    (    (    s6   /usr/lib/python2.7/dist-packages/PIL/GifImagePlugin.pyR¢   ô  s   R.   i    i   i   R/   RW   N(    (   i    i    (   R9   R^   Ra   Rf   R   Re   R   Rh   R[   RC   R   (   R8   t   offsett   paramsR¢   R
   (    (    s6   /usr/lib/python2.7/dist-packages/PIL/GifImagePlugin.pyR]   ï  s    
		K0s   .gifs	   image/gif(   i    i    (   t   __version__t   PILR    R   R   R   R   t   i16leR   Re   t   o16leRf   R   R   RX   t   ImportErrorR   R[   Rh   R‹   R`   R]   t   register_openRR   t   register_savet   register_extensiont   register_mime(    (    (    s6   /usr/lib/python2.7/dist-packages/PIL/GifImagePlugin.pyt   <module>   s.   "					Å

	b	1U(