
hR\                 @   s   d  d l  Z  d d l m Z m Z m Z m Z Gd d   d e  Z d d   Z d d	   Z	 d
 d   Z
 d d d  Z d d d  Z d d d  Z d d d  Z d d   Z d S)    N   )
ImageColorGimpPaletteFileGimpGradientFilePaletteFilec               @   sm   e  Z d  Z d Z d d d d d  Z d d   Z d	 d
   Z d d   Z e Z d d   Z	 d d   Z
 d S)ImagePaletteas  
    Color palette for palette mapped images

    :param mode: The mode to use for the Palette. See:
        :ref:`concept-modes`. Defaults to "RGB"
    :param palette: An optional palette. If given, it must be a bytearray,
        an array or a list of ints between 0-255 and of length ``size``
        times the number of colors in ``mode``. The list must be aligned
        by channel (All R values must be contiguous in the list before G
        and B values.) Defaults to 0 through 255 per channel.
    :param size: An optional palette size. If given, it cannot be equal to
        or greater than 256. Defaults to 0.
    RGBNr   c             C   s   | |  _  d  |  _ | p4 t t d   t |  j   |  _ i  |  _ d  |  _ | d k rz t |  j   d t |  j  k s | d k r | t |  j  k r t d   n  d  S)N   r   zwrong palette size)	moderawmode	bytearrayrangelenpalettecolorsdirty
ValueError)selfr
   r   size r   E/var/www/dbchiro/venv/lib/python3.4/site-packages/PIL/ImagePalette.py__init__&   s    		(		.!zImagePalette.__init__c             C   sk   t    } |  j | _ |  j | _ |  j d  k	 rI |  j d  d   | _ n  |  j j   | _ |  j | _ | S)N)r   r
   r   r   r   copyr   )r   newr   r   r   r   0   s    	zImagePalette.copyc             C   s0   |  j  r |  j  |  j f S|  j d |  j   f S)z
        Get palette contents in format suitable # for the low-level
        ``im.putpalette`` primitive.

        .. warning:: This method is experimental.
        z;L)r   r   r
   tobytes)r   r   r   r   getdata<   s    	zImagePalette.getdatac             C   si   |  j  r t d   n  t |  j t  r1 |  j St j d |  j  } t | d  r_ | j   S| j   S)zUConvert palette to bytes.

        .. warning:: This method is experimental.
        z!palette contains raw palette dataBr   )	r   r   
isinstancer   bytesarrayhasattrr   tostring)r   arrr   r   r   r   G   s    	
zImagePalette.tobytesc             C   s  |  j  r t d   n  t | t  r y |  j | SWqt k
 r t |  j t  rm t |  j  |  _ n  t	 |  j  } | d k r t d   n  | |  j | <| d |  j | <| d |  j | d <| d |  j | d <d |  _
 | SYqXn t d |   d	 S)
zgGiven an rgb tuple, allocate palette entry.

        .. warning:: This method is experimental.
        z!palette contains raw palette datar	   z$cannot allocate more than 256 colorsr   r      i   zunknown color specifier: %rN)r   r   r   tupler   KeyErrorr   r   r   r   r   )r   Zcolorindexr   r   r   getcolorX   s$    		zImagePalette.getcolorc             C   s  |  j  r t d   n  t | t  r9 t | d  } n  | j d  | j d |  j  x t d  D] } | j d |  xs t | t |  j  | d t |  j   D]D } y | j d |  j	 |  Wq t
 k
 r | j d	  Yq Xq W| j d
  qg W| j   d S)zVSave palette to text file.

        .. warning:: This method is experimental.
        z!palette contains raw palette datawz
# Palette
z# Mode: %s
r	   z%dr   z %dz 0
N)r   r   r   stropenwriter
   r   r   r   
IndexErrorclose)r   fpijr   r   r   saver   s    	4zImagePalette.save)__name__
__module____qualname____doc__r   r   r   r   r!   r'   r2   r   r   r   r   r      s   
r   c             C   s(   t    } |  | _ | | _ d | _ | S)Nr   )r   r   r   r   )r   datar   r   r   r   raw   s
    				r8   c             C   sK   g  } |  d k rA x2 t  d  D] } | j | | d  q Wn t  | S)Nr   r	      )r   appendNotImplementedError)Zblackwhitelutr0   r   r   r   make_linear_lut   s    r>   c             C   sD   g  } x7 t  d  D]) } | j t | d |  d d   q W| S)Nr	   g     o@g      ?)r   r:   int)expr=   r0   r   r   r   make_gamma_lut   s    'rA   r   c             C   s3   t  t d   } | j   t |  | t |    S)Nr	   )listr   reverser   r   )r
   r   r   r   r   negative   s    
rD   c             C   sZ   d d l  m } g  } x4 t d t |    D] } | j | d d   q- Wt |  |  S)Nr   )randintr	   r9   )randomrE   r   r   r:   r   )r
   rE   r   r0   r   r   r   rF      s
    rF   z#fff0c0c             C   sZ   t  j |   \ } } } t d |  } t d |  } t d |  } t d | | |  S)Nr   r   )r   Zgetrgbr>   r   )r<   rgbr   r   r   sepia   s
    rJ   c             C   s#   t  |  t t d   t |    S)Nr	   )r   rB   r   r   )r
   r   r   r   wedge   s    rK   c             C   s   t  |  d  ~ } xt t j t j t j g D]N } y- | j d  | |  j   } | r] Pn  Wq+ t t f k
 rx Yq+ Xq+ Wt d   Wd  QX| S)Nrbr   zcannot load palette)	r+   r   r   r   seekZ
getpaletteSyntaxErrorr   IOError)filenamer/   ZpaletteHandlerr=   r   r   r   load   s    	rQ   )r    r   r   r   r   objectr   r8   r>   rA   rD   rF   rJ   rK   rQ   r   r   r   r   <module>   s   "t
