o
    Ñ­j
#  ã                   @  sº   d dl mZ d dlZd dlmZmZmZ ddlmZm	Z	m
Z
mZ er(ddlmZ G dd„ dƒZd(dd„Zd)dd„Zd*dd„Zd+d,dd„Zd+d,dd„Zd-d.d d!„Zd+d,d"d#„Zd/d&d'„ZdS )0é    )ÚannotationsN)ÚIOÚTYPE_CHECKINGÚSequenceé   )ÚGimpGradientFileÚGimpPaletteFileÚ
ImageColorÚPaletteFile)ÚImagec                   @  s¤   e Zd ZdZ		d,d-d
d„Zed.dd„ƒZejd/dd„ƒZed0dd„ƒZejd1dd„ƒZd2dd„Z	d3dd„Z
d4dd„ZeZ	d5d6d"d#„Z	d7d8d&d'„Zd9d*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.
    ÚRGBNÚmodeÚstrÚpaletteú(Sequence[int] | bytes | bytearray | NoneÚreturnÚNonec                 C  s"   || _ d | _|p
tƒ | _d | _d S ©N)r   ÚrawmodeÚ	bytearrayr   Údirty)Úselfr   r   © r   úM/var/www/html/CropPilot/venv/lib/python3.10/site-packages/PIL/ImagePalette.pyÚ__init__)   s   
zImagePalette.__init__ú!Sequence[int] | bytes | bytearrayc                 C  s   | j S r   )Ú_palette©r   r   r   r   r   3   s   zImagePalette.palettec                 C  s   d | _ || _d S r   )Ú_colorsr   )r   r   r   r   r   r   7   s   
údict[tuple[int, ...], int]c                 C  sh   | j d u r1t| jƒ}i | _ tdt| jƒ|ƒD ]}t| j||| … ƒ}|| j v r)q|| | j |< q| j S )Nr   )r   Úlenr   Úranger   Útuple)r   Úmode_lenÚiÚcolorr   r   r   Úcolors<   s   


zImagePalette.colorsr'   c                 C  s
   || _ d S r   )r   )r   r'   r   r   r   r'   H   s   
c                 C  s<   t ƒ }| j|_| j|_| jd ur| jd d … |_| j|_|S r   )r   r   r   r   r   )r   Únewr   r   r   ÚcopyL   s   
zImagePalette.copyú-tuple[str, Sequence[int] | bytes | bytearray]c                 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   Útobytesr   r   r   r   ÚgetdataW   s   zImagePalette.getdataÚbytesc                 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.
        ú!palette contains raw palette dataÚB)r   Ú
ValueErrorÚ
isinstancer   r-   Úarrayr+   )r   ÚmsgÚarrr   r   r   r+   b   s   zImagePalette.tobytesÚimageúImage.Image | NoneÚeúException | NoneÚintc                 C  sº   t | jtƒst| jƒ| _t| jƒd }d}|r/|j d¡|j d¡f}||v r/|d7 }||v s'|dkr[|rPttt	| 
¡ ƒƒƒD ]\}}|dkrO||vrO|} nq?|dkr[d}t|ƒ|‚|S )	Né   r   Ú
backgroundÚtransparencyr   é   r   z$cannot allocate more than 256 colors)r1   r   r   r   r!   ÚinfoÚgetÚreversedÚlistÚ	enumerateÚ	histogramr0   )r   r5   r7   ÚindexÚspecial_colorsr%   Úcountr3   r   r   r   Ú_new_color_indexr   s,   

þÿ€
zImagePalette._new_color_indexr&   útuple[int, ...]c              
   C  sF  | j r	d}t|ƒ‚t|tƒr˜| jdkr,t|ƒdkr+|d dkr%d}t|ƒ‚|dd… }n| jdkr;t|ƒdkr;|d	7 }z| j| W S  ty— } zJ|  ||¡}t| j	t
ƒsWJ ‚|| j|< |d t| jƒk r| j	d|d … t|ƒ | j	|d d d…  | _	n	|  j	t|ƒ7  _	d
| _|W  Y d}~S d}~ww dt|ƒ› �}t|ƒ‚)zgGiven an rgb tuple, allocate palette entry.

        .. warning:: This method is experimental.
        r.   r   é   r:   éÿ   z/cannot add non-opaque RGBA color to RGB paletteNÚRGBA©rJ   r   zunknown color specifier: )r   r0   r1   r#   r   r!   r'   ÚKeyErrorrG   r   r   r   r-   r   Úrepr)r   r&   r5   r3   r7   rD   r   r   r   ÚgetcolorŒ   sD   	

€

ÿþÿ€òzImagePalette.getcolorÚfpústr | IO[str]c              
   C  sÒ   | j r	d}t|ƒ‚t|tƒrt|dƒ}| d¡ | d| j› d�¡ tdƒD ]<}| |› ¡ t|t| jƒ |d t| jƒ ƒD ]}z| d| j	| › �¡ W q? t
y\   | d	¡ Y q?w | d¡ q&| ¡  d
S )zVSave palette to text file.

        .. warning:: This method is experimental.
        r.   Úwz
# Palette
z# Mode: Ú
r=   r   ú z 0N)r   r0   r1   r   ÚopenÚwriter   r"   r!   r   Ú
IndexErrorÚclose)r   rP   r3   r%   Újr   r   r   Úsave·   s"   


&ÿzImagePalette.save)r   N)r   r   r   r   r   r   )r   r   )r   r   r   r   )r   r    )r'   r    r   r   )r   r   )r   r*   )r   r-   )NN)r5   r6   r7   r8   r   r9   r   )r&   rH   r5   r6   r   r9   )rP   rQ   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr   Úsetterr'   r)   r,   r+   ÚtostringrG   rO   rZ   r   r   r   r   r      s,    ý



ÿý+r   Údatar   r   c                 C  s   t ƒ }| |_||_d|_|S )Nr   )r   r   r   r   )r   rb   r   r   r   r   ÚrawÒ   s
   rc   Úblackr9   ÚwhiteÚfloatú	list[int]c                   s*   | dkr‡ fdd„t dƒD ƒS d}t|ƒ‚)Nr   c                   s   g | ]
}t ˆ | d  ƒ‘qS rL   ©r9   ©Ú.0r%   ©re   r   r   Ú
<listcomp>à   s    z#make_linear_lut.<locals>.<listcomp>r=   z"unavailable when black is non-zero)r"   ÚNotImplementedError)rd   re   r3   r   rk   r   Úmake_linear_lutÞ   s   rn   Úexpc                   s   ‡ fdd„t dƒD ƒS )Nc                   s$   g | ]}t |d  ˆ  d  d ƒ‘qS )g     ào@g      à?rh   ri   ©ro   r   r   rl   ç   s   $ z"make_gamma_lut.<locals>.<listcomp>r=   )r"   rp   r   rp   r   Úmake_gamma_lutæ   s   rq   r   r   r   c                   s4   t tdtˆ ƒ ƒƒ}| ¡  tˆ ‡ fdd„|D ƒƒS )Nr=   c                   ó   g | ]}|t ˆ ƒ ‘qS r   ©r!   ri   ©r   r   r   rl   í   ó    znegative.<locals>.<listcomp>)rA   r"   r!   Úreverser   ©r   r   r   rt   r   Únegativeê   s   rx   c                   s4   ddl m‰  ‡ fdd„tdt| ƒ ƒD ƒ}t| |ƒS )Nr   ©Úrandintc                   s   g | ]}ˆ d dƒ‘qS )r   rJ   r   )rj   Ú_ry   r   r   rl   ó   ó    zrandom.<locals>.<listcomp>r=   )Úrandomrz   r"   r!   r   rw   r   ry   r   r}   ð   s   
r}   ú#fff0c0c                   s0   dd„ t  | ¡D ƒ‰ td‡ fdd„tdƒD ƒƒS )Nc                 S  s   g | ]}t d |ƒ‘qS )r   )rn   )rj   Úbandr   r   r   rl   ø   r|   zsepia.<locals>.<listcomp>r   c                   s    g | ]}ˆ |d   |d   ‘qS )r:   r   ri   ©Úbandsr   r   rl   ù   s     i   )r	   Úgetrgbr   r"   rk   r   r€   r   Úsepia÷   s   rƒ   c                   s,   t tdtˆ ƒ ƒƒ}tˆ ‡ fdd„|D ƒƒS )Nr=   c                   rr   r   rs   ri   rt   r   r   rl   þ   ru   zwedge.<locals>.<listcomp>)rA   r"   r!   r   rw   r   rt   r   Úwedgeü   s   r„   Úfilenameútuple[bytes, str]c                 C  s�   t | dƒ�9}tjtjtjg}|D ]}z| d¡ ||ƒ ¡ }|r#W  nW q ttfy/   Y qw d}t|ƒ‚W d   ƒ |S 1 sAw   Y  |S )NÚrbr   zcannot load palette)	rU   r   r   r
   ÚseekÚ
getpaletteÚSyntaxErrorr0   ÚOSError)r…   rP   ÚpaletteHandlersÚpaletteHandlerÚlutr3   r   r   r   Úload  s.   ýú
ÿÿû
ïèr�   )rb   r   r   r   )rd   r9   re   rf   r   rg   )ro   rf   r   rg   )r   )r   r   r   r   )r~   )re   r   r   r   )r…   r   r   r†   )Ú
__future__r   r2   Útypingr   r   r   Ú r   r   r	   r
   r   r   rc   rn   rq   rx   r}   rƒ   r„   r�   r   r   r   r   Ú<module>   s     
6

