o
    \"<f                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ g Z	d&ddZ
d'ddZG d	d
 d
ZG dd deZejdkrDe
e G dd deZejdkrUe
e G dd deZG dd deZG dd deZG dd deZG dd deZejdvredre
e edre
e edre
e edre
e G d d! d!eZzd d"lmZ W n	 ey   Y nw e
e ed#kreejd$k red% e  e ejd Z!eee!gejd$d R   W d   dS 1 sw   Y  dS dS )(    Nquote)Image   c                 C   sN   z
t | tr	|  } W n	 ty   Y nw |dkrt|  dS td|  dS )a  
    The :py:func:`register` function is used to register additional viewers.

    :param viewer: The viewer to be registered.
    :param order:
        Zero or a negative integer to prepend this viewer to the list,
        a positive integer to append it.
    r   N)
issubclassViewer	TypeError_viewersappendinsert)viewerorder r   D/var/www/html/kck/venv/lib/python3.10/site-packages/PIL/ImageShow.pyregister   s   	
r   c                 K   s*   t D ]}|j| fd|i|r dS qdS )a  
    Display a given image.

    :param image: An image object.
    :param title: Optional title. Not all viewers can display the title.
    :param \**options: Additional viewer options.
    :returns: ``True`` if a suitable viewer was found, ``False`` otherwise.
    titler   r   )r	   show)imager   optionsr   r   r   r   r   .   s
   	r   c                   @   sL   e Zd ZdZdd ZdZ	 i Z	 dd Zdd Zd	d
 Z	dd Z
dd ZdS )r   zBase class for viewers.c                 K   sP   |j dv s| jdkr|j dv st|j }|j |kr||}| j|fi |S )z
        The main function for displaying an image.
        Converts the given image to the target format and displays it.
        )1RGBAPNG)zI;16LA)modeformatr   getmodebaseconvert
show_image)selfr   r   baser   r   r   r   B   s   


zViewer.showNc                 C   s   | j S )z3Return format name, or ``None`` to save as PGM/PPM.)r   r   r   r   r   r   
get_formatY   s   zViewer.get_formatc                 K   s   t )zj
        Returns the command used to display the file.
        Not implemented in the base class.
        )NotImplementedErrorr   filer   r   r   r   get_command]   s   zViewer.get_commandc                 C   s   |j dd| |i| jS )z+Save to temporary file and return filename.r   Nr   )_dumpr!   r   r    r   r   r   
save_imaged   s   zViewer.save_imagec                 K   s   | j | |fi |S )zDisplay the given image.)	show_filer'   r   r   r   r   r   r   r   h   s   zViewer.show_imagec                 K   s   t | j|fi | dS )zDisplay the given file.r   )ossystemr%   r#   r   r   r   r(   l   s   zViewer.show_file)__name__
__module____qualname____doc__r   r   r   r!   r%   r'   r   r(   r   r   r   r   r   =   s    r   c                   @   s$   e Zd ZdZdZddiZdd ZdS )WindowsViewerzNThe default viewer on Windows is the default system application for PNG files.r   compress_levelr   c                 K   s   d| d| dS )Nzstart "Pillow" /WAIT "z)" && ping -n 2 127.0.0.1 >NUL && del /f ""r   r#   r   r   r   r%   {   s   zWindowsViewer.get_commandN)r,   r-   r.   r/   r   r   r%   r   r   r   r   r0   u   s
    r0   win32c                   @   s,   e Zd ZdZdZddiZdd Zdd Zd	S )
	MacViewerz2The default viewer on macOS using ``Preview.app``.r   r1   r   c                 K   s(   d}d| dt | dt | d}|S )Nzopen -a Preview.app( z; sleep 20; rm -f )&r   r   r$   r   commandr   r   r   r%      s    zMacViewer.get_commandc                 K   s   t  \}}t|d}|| W d   n1 sw   Y  t|}tjdgd|d W d   n1 s9w   Y  t| dS )Display given filewNz7im=$(cat); open -a Preview.app $im; sleep 20; rm -f $imTshellstdinr   )	tempfilemkstempr*   fdopenwriteopen
subprocessPopenremove)r   r$   r   fdpathfr   r   r   r(      s   

zMacViewer.show_fileN)r,   r-   r.   r/   r   r   r%   r(   r   r   r   r   r4      s    r4   darwinc                   @   s(   e Zd ZdZddiZdd Zdd ZdS )	
UnixViewerr   r1   r   c                 K   s6   | j |fi |d }d| dt| dt| dS )Nr   r5   r6   z; rm -f r7   )get_command_exr   r8   r   r   r   r%      s    zUnixViewer.get_commandc                 K   s   t  \}}t|d}|| W d   n1 sw   Y  t| }| j|fi |d }tjd| d gd|d W d   n1 sHw   Y  t	| dS )	r:   r;   Nr   z
im=$(cat);z $im; rm -f $imTr<   r   )
r?   r@   r*   rA   rB   rC   rL   rD   rE   rF   )r   r$   r   rG   rH   rI   r9   r   r   r   r(      s   

zUnixViewer.show_fileN)r,   r-   r.   r   r   r%   r(   r   r   r   r   rK      s
    rK   c                   @      e Zd ZdZdd ZdS )DisplayViewerz$The ImageMagick ``display`` command.c                 K   s   d }}||fS )Ndisplayr   )r   r$   r   r9   
executabler   r   r   rL      s   zDisplayViewer.get_command_exNr,   r-   r.   r/   rL   r   r   r   r   rN          rN   c                   @   rM   )GmDisplayViewerz*The GraphicsMagick ``gm display`` command.c                 K      d}d}||fS )Ngmz
gm displayr   r   r$   r   rP   r9   r   r   r   rL         zGmDisplayViewer.get_command_exNrQ   r   r   r   r   rS      rR   rS   c                   @   rM   )	EogViewerz'The GNOME Image Viewer ``eog`` command.c                 K   rT   )Neogzeog -nr   rV   r   r   r   rL      rW   zEogViewer.get_command_exNrQ   r   r   r   r   rX      rR   rX   c                   @   s   e Zd ZdZdddZdS )XVViewerzX
    The X Viewer ``xv`` command.
    This viewer supports the ``title`` parameter.
    Nc                 K   s&   d }}|r|dt | 7 }||fS )Nxvz -name r   )r   r$   r   r   r9   rP   r   r   r   rL      s   zXVViewer.get_command_exNrQ   r   r   r   r   rZ      s    rZ   )r3   rJ   rO   rU   rY   r[   c                   @   rM   )IPythonViewerz!The viewer for IPython frontends.c                 K   s   t | dS )Nr   )ipython_displayr)   r   r   r   r      s   zIPythonViewer.show_imageN)r,   r-   r.   r/   r   r   r   r   r   r]      rR   r]   )rO   __main__   z.Syntax: python3 ImageShow.py imagefile [title])r   r\   )"r*   shutilrD   sysr?   shlexr   PILr   r	   r   r   r   r0   platformr4   rK   rN   rS   rX   rZ   whichr]   IPython.displayrO   r^   ImportErrorr,   lenargvprintexitrC   imr   r   r   r   <module>   s\   

8

		





 "