î
úÙ X™  ã               @   sÒ   d  d l  Z  d  d l m Z d  d l m Z d  d l m Z d  d l 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   úM/home/ubuntu/projects/ifolica/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   3   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   J   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   é   é   i   zunknown color specifier: %rN)r
   r   r   Útupler   ÚKeyErrorr   r   r   r   r   )r   ZcolorÚindexr   r   r   Úgetcolor[   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   Úsaveu   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 ƒ  } | rZ Pn  Wq( t t f k
 ru Yq( Xq( Wt d ƒ ‚ | 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   ZPILr   r   r   r   Úobjectr   r8   r>   rA   rD   rF   rJ   rK   rQ   r   r   r   r   Ú<module>   s   t
