o
    ÒèFhå$  ã                   @  sH  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d6d7dd„Zd8d9dd„ZG dd„ dƒZG dd„ deƒZejdkrReeƒ G dd„ deƒZejdkrce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*vrÅe d+¡r¡eeƒ e d,¡rªeeƒ e d-¡r³eeƒ e d.¡r¼eeƒ e d/¡rÅeeƒ G d0d1„ d1eƒZzd d2lmZ W n	 eyÞ   Y nw eeƒ e d3k�r"e!ej"ƒd4k r÷e#d5ƒ e $¡  e %ej"d ¡�Z&e#ee&gej"d4d… ¢R Ž ƒ W d  ƒ dS 1 �sw   Y  dS dS ):é    )ÚannotationsN©Úquote)ÚAnyé   )ÚImageÚorderÚintÚreturnÚNonec                 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::

        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   úF/var/www/html/loop/nvenv/lib/python3.10/site-packages/PIL/ImageShow.pyÚregister   s   
€ÿr   ÚimageúImage.ImageÚtitleú
str | NoneÚoptionsr   Úboolc                 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                   @  sj   e Zd ZU dZddd	„Zd
Zded< 	 i Zded< 	 ddd„Zddd„Z	ddd„Z
ddd„Zddd„Zd
S ) r   zBase class for viewers.r   r   r   r   r
   r	   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   J   s   


zViewer.showNr   r"   zdict[str, Any]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ÚfileÚstrc                 K  s   d}t |ƒ‚)zj
        Returns the command used to display the file.
        Not implemented in the base class.
        zunavailable in base viewer)ÚNotImplementedError)r&   r*   r   Úmsgr   r   r   Úget_commande   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_imagem   s   zViewer.save_imagec                 K  s   | j |  |¡fi |¤ŽS )zDisplay the given image.)Ú	show_filer0   ©r&   r   r   r   r   r   r%   q   s   zViewer.show_imageÚpathc                 K  s   t  | j|fi |¤Ž¡ dS )ú%
        Display given file.
        r   )ÚosÚsystemr.   ©r&   r3   r   r   r   r   r1   u   s   zViewer.show_file©r   r   r   r   r
   r	   )r   r   r
   r   ©r*   r+   r   r   r
   r+   )r   r   r
   r+   ©r3   r+   r   r   r
   r	   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r"   Ú__annotations__r   r)   r.   r0   r%   r1   r   r   r   r   r   E   s   
 




r   c                   @  ó2   e Zd ZdZdZdddœZddd„Zddd„ZdS )ÚWindowsViewerzNThe default viewer on Windows is the default system application for PNG files.r   r   T©Úcompress_levelÚsave_allr*   r+   r   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_commandr3   r	   c                 K  s(   t j| j|fi |¤Ždtt dƒd� dS )r4   TÚCREATE_NO_WINDOW)ÚshellÚcreationflagsr   )Ú
subprocessÚPopenr.   Úgetattrr7   r   r   r   r1   �   s   ýzWindowsViewer.show_fileNr9   r:   ©r;   r<   r=   r>   r"   r   r.   r1   r   r   r   r   rA   €   ó    

rA   Úwin32c                   @  r@   )Ú	MacViewerz2The default viewer on macOS using ``Preview.app``.r   r   TrB   r*   r+   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_commandr3   r	   c                 K  s<   t  ddd|g¡ tjpt d¡}|rt  |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   )rJ   ÚcallÚsysÚ
executableÚshutilÚwhichrK   )r&   r3   r   rY   r   r   r   r1   ª   s   üÿzMacViewer.show_fileNr9   r:   rM   r   r   r   r   rP   �   rN   rP   Údarwinc                   @  s4   e Zd ZdZdddœZejddd„ƒZddd„ZdS )Ú
UnixViewerr   r   TrB   r*   r+   r   r   r
   útuple[str, str]c                 K  s   d S ©Nr   rF   r   r   r   Úget_command_exÄ   s   zUnixViewer.get_command_exc                 K  s*   | j |fi |¤Žd }d|› dt|ƒ› �S )Nr   rQ   rR   )r`   r   rS   r   r   r   r.   È   s   zUnixViewer.get_commandN©r*   r+   r   r   r
   r^   r9   )	r;   r<   r=   r"   r   ÚabcÚabstractmethodr`   r.   r   r   r   r   r]   À   s    
r]   c                   @  ó$   e Zd ZdZddd	„Zddd„ZdS )Ú	XDGViewerz3
    The freedesktop.org ``xdg-open`` command.
    r*   r+   r   r   r
   r^   c                 K  s   d }}||fS )Núxdg-openr   )r&   r*   r   rT   rY   r   r   r   r`   Ò   s   zXDGViewer.get_command_exr3   r	   c                 K  s   t  d|g¡ dS )r4   rf   r   ©rJ   rK   r7   r   r   r   r1   Ö   s   zXDGViewer.show_fileNra   r:   ©r;   r<   r=   r>   r`   r1   r   r   r   r   re   Í   s    
re   c                   @  ó(   e Zd ZdZ	dddd„Zddd„ZdS )ÚDisplayViewerz`
    The ImageMagick ``display`` command.
    This viewer supports the ``title`` parameter.
    Nr*   r+   r   r   r   r   r
   r^   c                 K  ó&   d }}|r|dt |ƒ› �7 }||fS )NÚdisplayz -title r   ©r&   r*   r   r   rT   rY   r   r   r   r`   ä   s   zDisplayViewer.get_command_exr3   r	   c                 K  ó8   dg}|  d¡}|r|d|g7 }| |¡ t |¡ dS )r4   rl   r   z-titler   ©Úgetr   rJ   rK   ©r&   r3   r   Úargsr   r   r   r   r1   ì   ó   


zDisplayViewer.show_filer_   ©r*   r+   r   r   r   r   r
   r^   r:   rh   r   r   r   r   rj   Þ   s
    ÿrj   c                   @  rd   )ÚGmDisplayViewerz*The GraphicsMagick ``gm display`` command.r*   r+   r   r   r
   r^   c                 K  ó   d}d}||fS )NÚgmz
gm displayr   ©r&   r*   r   rY   rT   r   r   r   r`   ý   ó   zGmDisplayViewer.get_command_exr3   r	   c                 K  ó   t  dd|g¡ dS )r4   rw   rl   r   rg   r7   r   r   r   r1     ó   zGmDisplayViewer.show_fileNra   r:   rh   r   r   r   r   ru   ú   ó    
ru   c                   @  rd   )Ú	EogViewerz'The GNOME Image Viewer ``eog`` command.r*   r+   r   r   r
   r^   c                 K  rv   )NÚeogzeog -nr   rx   r   r   r   r`     ry   zEogViewer.get_command_exr3   r	   c                 K  rz   )r4   r~   z-nr   rg   r7   r   r   r   r1     r{   zEogViewer.show_fileNra   r:   rh   r   r   r   r   r}   
  r|   r}   c                   @  ri   )ÚXVViewerzX
    The X Viewer ``xv`` command.
    This viewer supports the ``title`` parameter.
    Nr*   r+   r   r   r   r   r
   r^   c                 K  rk   )NÚxvz -name r   rm   r   r   r   r`      s   zXVViewer.get_command_exr3   r	   c                 K  rn   )r4   r€   r   z-namer   ro   rq   r   r   r   r1   *  rs   zXVViewer.show_filer_   rt   r:   rh   r   r   r   r   r     s
    ÿ
r   )rO   r\   rf   rl   rw   r~   r€   c                   @  s   e Zd ZdZddd	„Zd
S )ÚIPythonViewerz!The viewer for IPython frontends.r   r   r   r   r
   r	   c                 K  s   t |ƒ dS )Nr   )Úipython_displayr2   r   r   r   r%   H  s   zIPythonViewer.show_imageNr8   )r;   r<   r=   r>   r%   r   r   r   r   r�   E  s    r�   )rl   Ú__main__é   z.Syntax: python3 ImageShow.py imagefile [title])r   )r   r	   r
   r   r_   )r   r   r   r   r   r   r
   r   )'Ú
__future__r   rb   r5   rZ   rJ   rX   Úshlexr   Útypingr   Ú r   r   r   r   r   rA   ÚplatformrP   r]   re   rj   ru   r}   r   r[   r�   ÚIPython.displayrl   r‚   ÚImportErrorr;   ÚlenÚargvÚprintÚexitrU   Úimr   r   r   r   Ú<module>   sf   ;







ÿ
 $ÿû