3
`JZ                 @   s|   d dl Z ddlmZmZmZmZ G d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               @   sF   e Zd ZdZ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   sv   || _ d | _|p$ttdt| j  | _i | _d | _|dkrTt| j d t| jksj|dkrr|t| jkrrtdd S )N   r   zwrong palette size)	moderawmode	bytearrayrangelenpalettecolorsdirty
ValueError)selfr
   r   size r   2/usr/lib/python3/dist-packages/PIL/ImagePalette.py__init__&   s     zImagePalette.__init__c             C   sH   t  }| j|_| j|_| jd k	r0| jd d  |_| jj |_| j|_|S )N)r   r
   r   r   r   copyr   )r   newr   r   r   r   0   s    
zImagePalette.copyc             C   s$   | 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   sH   | j rtdt| jtr | jS t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   Zarrr   r   r   r   G   s    
zImagePalette.tobytesc             C   s   | j rtdt|try
| j| S  tk
r   t| jtrJt| j| _t	| j}|dkrdtd|| j|< |d | j|< |d | j|d < |d | j|d < d| _
|S X n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t|tr"t|d}|jd |jd| j  xtdD ]}|jd|  xbt|t| j |d t| j D ]<}y|jd| j	|   W q| t
k
r   |jd	 Y q|X q|W |jd
 qFW |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    


(zImagePalette.save)r   Nr   )__name__
__module____qualname____doc__r   r   r   r   r!   r&   r1   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
    r7   c             C   s:   g }| dkr2x(t dD ]}|j|| d  qW nt|S )Nr   r	      )r   appendNotImplementedError)Zblackwhitelutr/   r   r   r   make_linear_lut   s    r=   c             C   s8   g }x.t dD ]"}|jt|d |  d d  qW |S )Nr	   g     o@g      ?)r   r9   int)Zexpr<   r/   r   r   r   make_gamma_lut   s    "r?   r   c             C   s&   t td}|j  t| |t|  S )Nr	   )listr   reverser   r   )r
   r   r   r   r   negative   s    rB   c             C   sD   ddl m} g }x(tdt|  D ]}|j|dd q"W t| |S )Nr   )randintr	   r8   )randomrC   r   r   r9   r   )r
   rC   r   r/   r   r   r   rD      s
    rD   #fff0c0c             C   s@   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
    


rI   c             C   s   t | ttdt|  S )Nr	   )r   r@   r   r   )r
   r   r   r   wedge   s    rJ   c             C   sv   t | db}xZtjtjtjgD ]>}y |jd ||j }|r@P W q ttfk
rZ   Y qX qW tdW d Q R X |S )Nrbr   zcannot load palette)	r*   r   r   r   seekZ
getpaletteSyntaxErrorr   IOError)filenamer.   ZpaletteHandlerr<   r   r   r   load   s    

rP   )r   )r   )rE   )r   )r    r   r   r   r   objectr   r7   r=   r?   rB   rD   rI   rJ   rP   r   r   r   r   <module>   s   t




