U
    M»{j,'  ã                	   @  sL  d dl mZ 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
 ddlmZ g Zd3ddd	œd
d„Zd4dddddœdd„ZG dd„ dƒZG dd„ deƒZejdkr´eeƒ G dd„ deƒZejdkrÖe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G d%d&„ d&eƒZejd'k�r¦e d(¡�rVeeƒ e d)¡�rjeeƒ e d*¡�r~eeƒ e d+¡�r’eeƒ e d,¡�r¦eeƒ G d-d.„ d.eƒZzd d/lmZ W n ek
�rÜ   Y n
X eeƒ e d0k�rHe!ej"ƒd1k �re#d2ƒ e $¡  e %ej"d ¡�"Z&e#ee&fej"d1d… žŽ ƒ W 5 Q R X dS )5é    )ÚannotationsN©Úquote)ÚAnyé   )ÚImageÚintÚNone)ÚorderÚreturnc                 C  sN   zt | tƒr| ƒ } W n tk
r(   Y nX |dkr>t | ¡ nt d| ¡ dS )a$  
    The :py:func:`register` function is used to register additional viewers::

        from PIL import ImageShow
        ImageShow.register(MyViewer())  # MyViewer will be used as a last resort
        ImageShow.register(MySecondViewer(), 0)  # MySecondViewer will be prioritised
        ImageShow.register(ImageShow.XVViewer(), 0)  # XVViewer will be prioritised

    :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)Úviewerr
   © r   úL/var/www/html/bwave/python/venv/lib/python3.8/site-packages/PIL/ImageShow.pyÚregister   s    

r   úImage.Imageú
str | Noner   Úbool)ÚimageÚtitleÚoptionsr   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.
    r   TF)r   Úshow)r   r   r   r   r   r   r   r   6   s    	r   c                   @  s’   e Zd ZU dZddddœdd„ZdZd	ed
< i Zded< dd	dœdd„Zddddœdd„Z	dddœdd„Z
ddddœdd„Zddddœdd„ZdS )r   zBase class for viewers.r   r   r   ©r   r   r   c                 K  sL   |j dks>| jdkr|j dks>t |j ¡}|j |kr>| |¡}| j|f|ŽS )zƒ
        The main function for displaying an image.
        Converts the given image to the target format and displays it.
        )Ú1ZRGBAÚPNG)zI;16ZLA)ÚmodeÚformatr   ZgetmodebaseÚconvertÚ
show_image)Úselfr   r   Úbaser   r   r   r   J   s    ÿþþ

zViewer.showNr   r!   zdict[str, Any]r   )r   r   c                 C  s   | j S )z3Return format name, or ``None`` to save as PGM/PPM.)r!   ©r$   r   r   r   r   Ú
get_formata   s    zViewer.get_formatÚstr©Úfiler   r   c                 K  s   d}t |ƒ‚dS )zj
        Returns the command used to display the file.
        Not implemented in the base class.
        zunavailable in base viewerN)ÚNotImplementedError)r$   r*   r   Úmsgr   r   r   Úget_commande   s    zViewer.get_commandc                 C  s   |j f d|  |¡i| j—ŽS )z+Save to temporary file and return filename.r!   )Ú_dumpr'   r   r&   r   r   r   Ú
save_imagem   s    zViewer.save_imagec                 K  s   | j |  |¡f|ŽS )zDisplay the given image.)Ú	show_filer/   ©r$   r   r   r   r   r   r#   q   s    zViewer.show_image©Úpathr   r   c                 K  s(   t j |¡st‚t  | j|f|Ž¡ dS )ú%
        Display given file.
        r   )Úosr3   ÚexistsÚFileNotFoundErrorÚsystemr-   ©r$   r3   r   r   r   r   r0   u   s    zViewer.show_file)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r!   Ú__annotations__r   r'   r-   r/   r#   r0   r   r   r   r   r   E   s   
r   c                   @  sB   e Zd ZdZdZdddœZddddœd	d
„Zddddœdd„ZdS )ÚWindowsViewerzNThe default viewer on Windows is the default system application for PNG files.r   r   T©Zcompress_levelZsave_allr(   r   r)   c                 K  s   d|› d|› d�S )Nzstart "Pillow" /WAIT "z)" && ping -n 4 127.0.0.1 >NUL && del /f "ú"r   ©r$   r*   r   r   r   r   r-   ˆ   s    ÿzWindowsViewer.get_commandr   r2   c                 K  s4   t j |¡st‚tj| j|f|Ždttdƒd� dS )r4   TZCREATE_NO_WINDOW)ÚshellÚcreationflagsr   )r5   r3   r6   r7   Ú
subprocessÚPopenr-   Úgetattrr9   r   r   r   r0   �   s    ýzWindowsViewer.show_fileN©r:   r;   r<   r=   r!   r   r-   r0   r   r   r   r   r?   ‚   s
   
r?   Úwin32c                   @  sB   e Zd ZdZdZdddœZddddœd	d
„Zddddœdd„ZdS )Ú	MacViewerz2The default viewer on macOS using ``Preview.app``.r   r   Tr@   r(   r   r)   c                 K  s(   d}d|› dt |ƒ› dt |ƒ› d�}|S )Nzopen -a Preview.appú(ú z; sleep 20; rm -f z)&r   ©r$   r*   r   Úcommandr   r   r   r-   §   s     zMacViewer.get_commandr   r2   c                 K  sL   t j |¡st‚t ddd|g¡ tjp0t 	d¡}|rHt 
|dd|g¡ dS )r4   Úopenz-azPreview.appÚpython3z-cz<import os, sys, time; time.sleep(20); os.remove(sys.argv[1])r   )r5   r3   r6   r7   rE   ÚcallÚsysÚ
executableÚshutilÚwhichrF   )r$   r3   r   rS   r   r   r   r0   ®   s    üÿzMacViewer.show_fileNrH   r   r   r   r   rJ   ¡   s
   
rJ   Údarwinc                   @  sD   e Zd ZdZdddœZejddddœd	d
„ƒZddddœdd„ZdS )Ú
UnixViewerr   r   Tr@   r(   r   útuple[str, str]r)   c                 K  s   d S )Nr   rB   r   r   r   Úget_command_exÊ   s    zUnixViewer.get_command_exc                 K  s$   | j |f|Žd }|› dt|ƒ› �S )Nr   rL   )rY   r   rM   r   r   r   r-   Î   s    zUnixViewer.get_commandN)	r:   r;   r<   r!   r   ÚabcÚabstractmethodrY   r-   r   r   r   r   rW   Æ   s
   
rW   c                   @  s4   e Zd ZdZddddœdd„Zdddd	œd
d„ZdS )Ú	XDGViewerz3
    The freedesktop.org ``xdg-open`` command.
    r(   r   rX   r)   c                 K  s   d }}||fS )Núxdg-openr   )r$   r*   r   rN   rS   r   r   r   rY   Ø   s    zXDGViewer.get_command_exr   r2   c                 K  s"   t j |¡st‚t d|g¡ dS )r4   r]   r   ©r5   r3   r6   r7   rE   rF   r9   r   r   r   r0   Ü   s    zXDGViewer.show_fileN©r:   r;   r<   r=   rY   r0   r   r   r   r   r\   Ó   s   r\   c                   @  s8   e Zd ZdZddddddœdd	„Zddd
dœdd„ZdS )ÚDisplayViewerz`
    The ImageMagick ``display`` command.
    This viewer supports the ``title`` parameter.
    Nr(   r   r   rX   ©r*   r   r   r   c                 K  s&   d }}|r|dt |ƒ› �7 }||fS )NÚdisplayz -title r   ©r$   r*   r   r   rN   rS   r   r   r   rY   ì   s    zDisplayViewer.get_command_exr   r2   c                 K  sH   t j |¡st‚dg}| d¡}|r0|d|g7 }| |¡ t |¡ dS )r4   rb   r   z-titler   ©r5   r3   r6   r7   Úgetr   rE   rF   ©r$   r3   r   Úargsr   r   r   r   r0   ô   s    


zDisplayViewer.show_file)Nr_   r   r   r   r   r`   æ   s    ÿr`   c                   @  s4   e Zd ZdZddddœdd„Zdddd	œd
d„ZdS )ÚGmDisplayViewerz*The GraphicsMagick ``gm display`` command.r(   r   rX   r)   c                 K  s   d}d}||fS )NÚgmz
gm displayr   ©r$   r*   r   rS   rN   r   r   r   rY     s    zGmDisplayViewer.get_command_exr   r2   c                 K  s$   t j |¡st‚t dd|g¡ dS )r4   ri   rb   r   r^   r9   r   r   r   r0     s    zGmDisplayViewer.show_fileNr_   r   r   r   r   rh     s   rh   c                   @  s4   e Zd ZdZddddœdd„Zdddd	œd
d„ZdS )Ú	EogViewerz'The GNOME Image Viewer ``eog`` command.r(   r   rX   r)   c                 K  s   d}d}||fS )NÚeogzeog -nr   rj   r   r   r   rY     s    zEogViewer.get_command_exr   r2   c                 K  s$   t j |¡st‚t dd|g¡ dS )r4   rl   z-nr   r^   r9   r   r   r   r0     s    zEogViewer.show_fileNr_   r   r   r   r   rk     s   rk   c                   @  s8   e Zd ZdZddddddœdd	„Zddd
dœdd„ZdS )ÚXVViewerzX
    The X Viewer ``xv`` command.
    This viewer supports the ``title`` parameter.
    Nr(   r   r   rX   ra   c                 K  s&   d }}|r|dt |ƒ› �7 }||fS )NÚxvz -name r   rc   r   r   r   rY   .  s    zXVViewer.get_command_exr   r2   c                 K  sH   t j |¡st‚dg}| d¡}|r0|d|g7 }| |¡ t |¡ dS )r4   rn   r   z-namer   rd   rf   r   r   r   r0   8  s    


zXVViewer.show_file)Nr_   r   r   r   r   rm   (  s    ÿ
rm   )rI   rV   r]   rb   ri   rl   rn   c                   @  s"   e Zd ZdZddddœdd„ZdS )	ÚIPythonViewerz!The viewer for IPython frontends.r   r   r   r   c                 K  s   t |ƒ dS )Nr   )Úipython_displayr1   r   r   r   r#   X  s    zIPythonViewer.show_imageN)r:   r;   r<   r=   r#   r   r   r   r   ro   U  s   ro   )rb   Ú__main__é   z.Syntax: python3 ImageShow.py imagefile [title])r   )N)'Ú
__future__r   rZ   r5   rT   rE   rR   Úshlexr   Útypingr   Ú r   r   r   r   r   r?   ÚplatformrJ   rW   r\   r`   rh   rk   rm   rU   ro   ÚIPython.displayrb   rp   ÚImportErrorr:   ÚlenÚargvÚprintÚexitrO   Zimr   r   r   r   Ú<module>   s^   =
!
 
