3

h                 @   s   d dl Z d dlZddlmZmZmZ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PaletteFilec               @   sb   e Zd ZdZd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.
    :param size: An optional palette size. If given, an error is raised
        if ``palette`` is not of equal length.
    RGBNr   c             C   sL   || _ d | _|pt | _d | _|dkrHtjdt |t| jkrHt	dd S )Nr   zOThe size parameter is deprecated and will be removed in Pillow 10 (2023-01-02).zwrong palette size)
moderawmode	bytearraypalettedirtywarningswarnDeprecationWarninglen
ValueError)selfr	   r   size r   P/var/www/html/enquirykeeper_venv/lib/python3.6/site-packages/PIL/ImagePalette.py__init__'   s    zImagePalette.__init__c             C   s   | j S )N)_palette)r   r   r   r   r   5   s    zImagePalette.palettec             C   sf   || _ t| j}i | _xJtdt| j|D ]4}t| j|||  }|| jkrPq*|| | j|< q*W d S )Nr   )r   r   r	   colorsranger   tuple)r   r   Zmode_lenicolorr   r   r   r   9   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   copyE   s    
zImagePalette.copyc             C   s    | j r| j | jfS | j| 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   getdataP   s    zImagePalette.getdatac             C   s6   | j rtdt| jtr | jS tjd| j}|j S )zUConvert palette to bytes.

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

        .. warning:: This method is experimental.
        z!palette contains raw palette datar            NZRGBAZ
backgroundZtransparencyr      r   z$cannot allocate more than 256 colorszunknown color specifier: )r(   )r
   r   r#   r   r	   r   r   KeyErrorr   r   r   infogetreversedlist	enumerateZ	histogramr$   r   repr)r   r   imageeindexZspecial_colorsr   countr   r   r   getcolorj   sH    








4zImagePalette.getcolorc             C   s   | j rtdt|tr"t|d}|jd |jd| j d xtdD ]}|j|  xdt|t| j |d t| j D ]>}y|jd| j	|   W q~ t
k
r   |jd	 Y q~X q~W |jd qJW |j  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   jr   r   r   save   s    


(zImagePalette.save)r   Nr   )N)__name__
__module____qualname____doc__r   propertyr   setterr   r!   r    tostringr5   r@   r   r   r   r   r      s   

4r   c             C   s   t  }| |_||_d|_|S )Nr   )r   r
   r   r   )r
   datar   r   r   r   raw   s
    rI   c             C   s:   g }| dkr2x(t dD ]}|j|| d  qW nt|S )Nr   r)   r(   )r   appendNotImplementedError)blackwhitelutr   r   r   r   make_linear_lut   s    rO   c             C   s8   g }x.t dD ]"}|jt|d |  d d  qW |S )Nr)   g     o@g      ?)r   rJ   int)exprN   r   r   r   r   make_gamma_lut   s    "rR   r   c                s4   t tdt  }|j  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>)r.   r   r   reverser   )r	   r   r   )r	   r   negative   s    rV   c             C   sD   ddl m} g }x(tdt|  D ]}|j|dd q"W t| |S )Nr   )randintr)   r(   )randomrW   r   r   rJ   r   )r	   rW   r   r   r   r   r   rX      s
    rX   #fff0c0c                s0   dd t j| D  td fddtdD S )Nc             S   s   g | ]}t d |qS )r   )rO   )rS   Zbandr   r   r   rT      s    zsepia.<locals>.<listcomp>r   c                s    g | ]} |d   |d   qS )r'   r   )rS   r   )bandsr   r   rT      s    r)   r'   i   )r   Zgetrgbr   r   )rM   r   )rZ   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   )rS   r   )r	   r   r   rT      s    zwedge.<locals>.<listcomp>)r.   r   r   r   )r	   r   r   )r	   r   wedge   s    r\   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   OSError)filenamer>   ZpaletteHandlerrN   r   r   r   load   s    

rb   )r   )r   )rY   )r   )r%   r    r   r   r   r   r   rI   rO   rR   rV   rX   r[   r\   rb   r   r   r   r   <module>   s     


	

