B
    eAd                 @   s   d dl Z ddlmZmZmZmZ ddlmZ G dd d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   )GimpGradientFileGimpPaletteFile
ImageColorPaletteFile)	deprecatec               @   s|   e Zd ZdZdddZedd Zejd	d Zed
d Zejdd Zdd Z	dd Z
dd ZeZdddZdd ZdS )ImagePalettea  
    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. The list must consist of
        all channels for one color followed by the next color (e.g. RGBRGBRGB).
        Defaults to an empty palette.
    RGBNr   c             C   sP   || _ d | _|pt | _d | _|dkrLtddd  |t| jkrLd}t|d S )Nr   zThe size parameter
   zwrong palette size)moderawmode	bytearraypalettedirtyr   len
ValueError)selfr   r   sizemsg r   B/var/www/html/venv/lib/python3.7/site-packages/PIL/ImagePalette.py__init__%   s    zImagePalette.__init__c             C   s   | j S )N)_palette)r   r   r   r   r   0   s    zImagePalette.palettec             C   s   d | _ || _d S )N)_colorsr   )r   r   r   r   r   r   4   s    c             C   sl   | j d krft| j}i | _ xJtdt| j|D ]4}t| j|||  }|| j krTq.|| | j |< q.W | j S )Nr   )r   r   r   ranger   tuple)r   Zmode_lenicolorr   r   r   colors9   s    


zImagePalette.colorsc             C   s
   || _ d S )N)r   )r   r   r   r   r   r   E   s    c             C   s<   t  }| j|_| j|_| jd k	r0| jd d  |_| j|_|S )N)r   r   r   r   r   )r   newr   r   r   copyI   s    
zImagePalette.copyc             C   s    | j r| j | jfS | j|  fS )z
        Get palette contents in format suitable for the low-level
        ``im.putpalette`` primitive.

        .. warning:: This method is experimental.
        )r   r   r   tobytes)r   r   r   r   getdataT   s    zImagePalette.getdatac             C   s:   | j rd}t|t| jtr$| jS td| j}| S )zUConvert palette to bytes.

        .. warning:: This method is experimental.
        z!palette contains raw palette dataB)r   r   
isinstancer   bytesarrayr!   )r   r   Zarrr   r   r   r!   _   s    zImagePalette.tobytesc       	   
   C   s  | j rd}t|t|tr| jdkrZt|dkrx|d dkrLd}t||dd }n| jdkrxt|dkrx|d	7 }y
| j| S  tk
r } z0t| jt	st	| j| _
t| jd }d
}|r|jd|jdf}x||kr|d7 }qW |dkrZ|rBx<ttt| D ]$\}}|dkr||kr|}P qW |dkrZd}t|||| j|< |d t| jk r| jd|d  t| | j|d d d  | _
n|  j
t|7  _
d| _|S d}~X Y nX ndt| }t|dS )zgGiven an rgb tuple, allocate palette entry.

        .. warning:: This method is experimental.
        z!palette contains raw palette datar	            z/cannot add non-opaque RGBA color to RGB paletteNZRGBA)r)   r   
backgroundZtransparencyr      r   z$cannot allocate more than 256 colorszunknown color specifier: )r   r   r$   r   r   r   r   KeyErrorr   r   r   infogetreversedlist	enumerateZ	histogramr%   r   repr)	r   r   imager   eindexZspecial_colorsr   countr   r   r   getcoloro   sT    








4zImagePalette.getcolorc          
   C   s   | j rd}t|t|tr&t|d}|d |d| j d xtdD ]}||  xdt|t| j |d t| j D ]>}y|d| j	|   W q t
k
r   |d	 Y qX qW |d qNW |  d
S )zVSave palette to text file.

        .. warning:: This method is experimental.
        z!palette contains raw palette datawz
# Palette
z# Mode: 
r+   r    z 0N)r   r   r$   stropenwriter   r   r   r   
IndexErrorclose)r   fpr   r   jr   r   r   save   s     


(zImagePalette.save)r	   Nr   )N)__name__
__module____qualname____doc__r   propertyr   setterr   r    r"   r!   tostringr7   rB   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
    rK   c             C   s:   g }| dkr2x(t dD ]}||| d  qW nt|S )Nr   r+   r)   )r   appendNotImplementedError)blackwhitelutr   r   r   r   make_linear_lut   s    rQ   c             C   s8   g }x.t dD ]"}|t|d |  d d  qW |S )Nr+   g     o@g      ?)r   rL   int)exprP   r   r   r   r   make_gamma_lut   s    "rT   r	   c                s4   t tdt  }|  t  fdd|D S )Nr+   c                s   g | ]}|t   qS r   )r   ).0r   )r   r   r   
<listcomp>   s    znegative.<locals>.<listcomp>)r0   r   r   reverser   )r   r   r   )r   r   negative   s    rX   c             C   sD   ddl m} g }x(tdt|  D ]}||dd q"W t| |S )Nr   )randintr+   r)   )randomrY   r   r   rL   r   )r   rY   r   r   r   r   r   rZ      s
    rZ   #fff0c0c                s0   dd t | D  td fddtdD S )Nc             S   s   g | ]}t d |qS )r   )rQ   )rU   Zbandr   r   r   rV      s    zsepia.<locals>.<listcomp>r	   c                s    g | ]} |d   |d   qS )r(   r   )rU   r   )bandsr   r   rV      s    i   )r   Zgetrgbr   r   )rO   r   )r\   r   sepia   s    r]   c                s,   t tdt  }t  fdd|D S )Nr+   c                s   g | ]}|t   qS r   )r   )rU   r   )r   r   r   rV      s    zwedge.<locals>.<listcomp>)r0   r   r   r   )r   r   r   )r   r   wedge   s    r^   c             C   sz   t | df}x^tjtjtjgD ]>}y |d || }|r@P W q ttfk
rZ   Y qX qW d}t|W d Q R X |S )Nrbr   zcannot load palette)	r<   r   r   r   seekZ
getpaletteSyntaxErrorr   OSError)filenamer@   ZpaletteHandlerrP   r   r   r   r   load   s    

rd   )r	   )r	   )r[   )r	   )r&    r   r   r   r   Z
_deprecater   r   rK   rQ   rT   rX   rZ   r]   r^   rd   r   r   r   r   <module>   s    ,


	

