o
    Ñ­j,'  ã                   @  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   úJ/var/www/html/CropPilot/venv/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 |¡st‚t  | j|fi |¤Ž¡ dS )ú%
        Display given file.
        r   )Úosr3   ÚexistsÚFileNotFoundErrorÚ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  s8   t j |¡st‚tj| j|fi |¤Ždttdƒd� dS )r4   TÚCREATE_NO_WINDOW)ÚshellÚcreationflagsr   )r5   r3   r6   r7   Ú
subprocessÚPopenr.   Úgetattrr9   r   r   r   r1   �   s   ýzWindowsViewer.show_fileNr;   r<   ©r=   r>   r?   r@   r"   r   r.   r1   r   r   r   r   rC   ‚   ó    

rC   Úwin32c                   @  rB   )Ú	MacViewerz2The default viewer on macOS using ``Preview.app``.r   r   TrD   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  sL   t j |¡st‚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   )r5   r3   r6   r7   rL   ÚcallÚsysÚ
executableÚshutilÚwhichrM   )r&   r3   r   r[   r   r   r   r1   ®   s   üÿzMacViewer.show_fileNr;   r<   rO   r   r   r   r   rR   ¡   rP   rR   Ú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   TrD   r*   r+   r   r   r
   útuple[str, str]c                 K  s   d S ©Nr   rH   r   r   r   Úget_command_exÊ   s   zUnixViewer.get_command_exc                 K  s(   | j |fi |¤Žd }|› dt|ƒ› �S )Nr   rT   )rb   r   rU   r   r   r   r.   Î   s   zUnixViewer.get_commandN©r*   r+   r   r   r
   r`   r;   )	r=   r>   r?   r"   r   ÚabcÚabstractmethodrb   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   rV   r[   r   r   r   rb   Ø   s   zXDGViewer.get_command_exr3   r	   c                 K  s"   t j |¡st‚t d|g¡ dS )r4   rh   r   ©r5   r3   r6   r7   rL   rM   r9   r   r   r   r1   Ü   s   zXDGViewer.show_fileNrc   r<   ©r=   r>   r?   r@   rb   r1   r   r   r   r   rg   Ó   s    
rg   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   rV   r[   r   r   r   rb   ì   s   zDisplayViewer.get_command_exr3   r	   c                 K  óH   t j |¡st‚dg}| d¡}|r|d|g7 }| |¡ t |¡ dS )r4   rn   r   z-titler   ©r5   r3   r6   r7   Úgetr   rL   rM   ©r&   r3   r   Úargsr   r   r   r   r1   ô   ó   


zDisplayViewer.show_filera   ©r*   r+   r   r   r   r   r
   r`   r<   rj   r   r   r   r   rl   æ   s
    ÿrl   c                   @  rf   )Ú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   r[   rV   r   r   r   rb     ó   zGmDisplayViewer.get_command_exr3   r	   c                 K  ó$   t j |¡st‚t dd|g¡ dS )r4   ry   rn   r   ri   r9   r   r   r   r1     ó   zGmDisplayViewer.show_fileNrc   r<   rj   r   r   r   r   rw     ó    
rw   c                   @  rf   )Ú	EogViewerz'The GNOME Image Viewer ``eog`` command.r*   r+   r   r   r
   r`   c                 K  rx   )NÚeogzeog -nr   rz   r   r   r   rb     r{   zEogViewer.get_command_exr3   r	   c                 K  r|   )r4   r€   z-nr   ri   r9   r   r   r   r1     r}   zEogViewer.show_fileNrc   r<   rj   r   r   r   r   r     r~   r   c                   @  rk   )ÚXVViewerzX
    The X Viewer ``xv`` command.
    This viewer supports the ``title`` parameter.
    Nr*   r+   r   r   r   r   r
   r`   c                 K  rm   )NÚxvz -name r   ro   r   r   r   rb   .  s   zXVViewer.get_command_exr3   r	   c                 K  rp   )r4   r‚   r   z-namer   rq   rs   r   r   r   r1   8  ru   zXVViewer.show_filera   rv   r<   rj   r   r   r   r   r�   (  s
    ÿ
r�   )rQ   r^   rh   rn   ry   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%   X  s   zIPythonViewer.show_imageNr:   )r=   r>   r?   r@   r%   r   r   r   r   rƒ   U  s    rƒ   )rn   Ú__main__é   z.Syntax: python3 ImageShow.py imagefile [title])r   )r   r	   r
   r   ra   )r   r   r   r   r   r   r
   r   )'Ú
__future__r   rd   r5   r\   rL   rZ   Úshlexr   Útypingr   Ú r   r   r   r   r   rC   ÚplatformrR   r_   rg   rl   rw   r   r�   r]   rƒ   ÚIPython.displayrn   r„   ÚImportErrorr=   ÚlenÚargvÚprintÚexitrW   Úimr   r   r   r   Ú<module>   sf   =

!
 




ÿ
 $ÿû