U
    ­Ê¹j–&  ã                
   @   sž  d dl mZ d dlmZ d dlZddlmZ ddlmZ zedƒ W n6 e	e
fk
rz Z zede› d	�ƒ W 5 dZ[X Y nX G d
d„ deƒZeejdœdd„Zeejddœdd„Zejfejeejdœdd„Zd.ejeejdœdd„Zd/ejeedœdd„Zejdfejeeejdœdd„Zd0ejeejd!œd"d#„Zd1ejeed$œd%d&„Zejfejeejdœd'd(„Zejfeeejd)œd*d+„Zejfeeejd)œd,d-„ZdS )2é    )ÚEnum)ÚwarnNé   )Ú_load_library)Ú_log_api_usage_onceÚimagez(Failed to load image Python extension: 'zü'If you don't plan on using image functionality from `torchvision.io`, you can ignore this warning. Otherwise, there might be something wrong with your environment. Did you have `libjpeg` or `libpng` installed before building `torchvision` from source?c                   @   s$   e Zd ZdZdZdZdZdZdZdS )ÚImageReadModeaV  
    Support for various modes while reading images.

    Use ``ImageReadMode.UNCHANGED`` for loading the image as-is,
    ``ImageReadMode.GRAY`` for converting to grayscale,
    ``ImageReadMode.GRAY_ALPHA`` for grayscale with transparency,
    ``ImageReadMode.RGB`` for RGB and ``ImageReadMode.RGB_ALPHA`` for
    RGB with transparency.
    r   é   r   é   é   N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	UNCHANGEDZGRAYZ
GRAY_ALPHAÚRGBZ	RGB_ALPHA© r   r   úS/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torchvision/io/image.pyr      s   
r   )ÚpathÚreturnc                 C   s.   t j ¡ st j ¡ sttƒ t jj | ¡}|S )zÅ
    Reads and outputs the bytes contents of a file as a uint8 Tensor
    with one dimension.

    Args:
        path (str): the path to the file to be read

    Returns:
        data (Tensor)
    )ÚtorchÚjitÚis_scriptingÚ
is_tracingr   Ú	read_fileÚopsr   )r   Údatar   r   r   r   '   s    r   )Úfilenamer   r   c                 C   s0   t j ¡ st j ¡ sttƒ t jj | |¡ dS )zÝ
    Writes the contents of an uint8 tensor with one dimension to a
    file.

    Args:
        filename (str): the path to the file to be written
        data (Tensor): the contents to be written to the output file
    N)r   r   r   r   r   Ú
write_filer   r   )r   r   r   r   r   r   8   s    	r   )ÚinputÚmoder   c                 C   s4   t j ¡ st j ¡ sttƒ t jj | |jd¡}|S )aw  
    Decodes a PNG image into a 3 dimensional RGB or grayscale Tensor.
    Optionally converts the image to the desired format.
    The values of the output tensor are uint8 in [0, 255].

    Args:
        input (Tensor[1]): a one dimensional uint8 tensor containing
            the raw bytes of the PNG image.
        mode (ImageReadMode): the read mode used for optionally
            converting the image. Default: ``ImageReadMode.UNCHANGED``.
            See `ImageReadMode` class for more information on various
            available modes.

    Returns:
        output (Tensor[image_channels, image_height, image_width])
    F)	r   r   r   r   r   Ú
decode_pngr   r   Úvalue©r   r    Úoutputr   r   r   r!   F   s    r!   é   )r   Úcompression_levelr   c                 C   s0   t j ¡ st j ¡ sttƒ t jj | |¡}|S )a	  
    Takes an input tensor in CHW layout and returns a buffer with the contents
    of its corresponding PNG file.

    Args:
        input (Tensor[channels, image_height, image_width]): int8 image tensor of
            ``c`` channels, where ``c`` must 3 or 1.
        compression_level (int): Compression factor for the resulting file, it must be a number
            between 0 and 9. Default: 6

    Returns:
        Tensor[1]: A one dimensional int8 tensor that contains the raw bytes of the
            PNG file.
    )r   r   r   r   r   Ú
encode_pngr   r   )r   r&   r$   r   r   r   r'   ]   s    r'   )r   r   r&   c                 C   s4   t j ¡ st j ¡ sttƒ t| |ƒ}t||ƒ dS )aÂ  
    Takes an input tensor in CHW layout (or HW in the case of grayscale images)
    and saves it in a PNG file.

    Args:
        input (Tensor[channels, image_height, image_width]): int8 image tensor of
            ``c`` channels, where ``c`` must be 1 or 3.
        filename (str): Path to save the image.
        compression_level (int): Compression factor for the resulting file, it must be a number
            between 0 and 9. Default: 6
    N)r   r   r   r   r   Ú	write_pngr'   r   )r   r   r&   r$   r   r   r   r(   r   s    
r(   Úcpu)r   r    Údevicer   c                 C   s\   t j ¡ st j ¡ sttƒ t  |¡}|jdkrFt jj	 
| |j|¡}nt jj	 | |j¡}|S )af  
    Decodes a JPEG image into a 3 dimensional RGB or grayscale Tensor.
    Optionally converts the image to the desired format.
    The values of the output tensor are uint8 between 0 and 255.

    Args:
        input (Tensor[1]): a one dimensional uint8 tensor containing
            the raw bytes of the JPEG image. This tensor must be on CPU,
            regardless of the ``device`` parameter.
        mode (ImageReadMode): the read mode used for optionally
            converting the image. The supported modes are: ``ImageReadMode.UNCHANGED``,
            ``ImageReadMode.GRAY`` and ``ImageReadMode.RGB``
            Default: ``ImageReadMode.UNCHANGED``.
            See ``ImageReadMode`` class for more information on various
            available modes.
        device (str or torch.device): The device on which the decoded image will
            be stored. If a cuda device is specified, the image will be decoded
            with `nvjpeg <https://developer.nvidia.com/nvjpeg>`_. This is only
            supported for CUDA version >= 10.1

            .. betastatus:: device parameter

            .. warning::
                There is a memory leak in the nvjpeg library for CUDA versions < 11.6.
                Make sure to rely on CUDA 11.6 or above before using ``device="cuda"``.

    Returns:
        output (Tensor[image_channels, image_height, image_width])
    Úcuda)r   r   r   r   r   Údecode_jpegr*   Útyper   r   Zdecode_jpeg_cudar"   )r   r    r*   r$   r   r   r   r,   „   s     

r,   éK   )r   Úqualityr   c                 C   sH   t j ¡ st j ¡ sttƒ |dk s,|dkr4tdƒ‚t jj | |¡}|S )a
  
    Takes an input tensor in CHW layout and returns a buffer with the contents
    of its corresponding JPEG file.

    Args:
        input (Tensor[channels, image_height, image_width])): int8 image tensor of
            ``c`` channels, where ``c`` must be 1 or 3.
        quality (int): Quality of the resulting JPEG file, it must be a number between
            1 and 100. Default: 75

    Returns:
        output (Tensor[1]): A one dimensional int8 tensor that contains the raw bytes of the
            JPEG file.
    r	   éd   z;Image quality should be a positive number between 1 and 100)	r   r   r   r   r   Úencode_jpegÚ
ValueErrorr   r   )r   r/   r$   r   r   r   r1   ®   s    r1   )r   r   r/   c                 C   s4   t j ¡ st j ¡ sttƒ t| |ƒ}t||ƒ dS )a‰  
    Takes an input tensor in CHW layout and saves it in a JPEG file.

    Args:
        input (Tensor[channels, image_height, image_width]): int8 image tensor of ``c``
            channels, where ``c`` must be 1 or 3.
        filename (str): Path to save the image.
        quality (int): Quality of the resulting JPEG file, it must be a number
            between 1 and 100. Default: 75
    N)r   r   r   r   r   Ú
write_jpegr1   r   )r   r   r/   r$   r   r   r   r3   Æ   s    
r3   c                 C   s2   t j ¡ st j ¡ sttƒ t jj | |j¡}|S )aÔ  
    Detects whether an image is a JPEG or PNG and performs the appropriate
    operation to decode the image into a 3 dimensional RGB or grayscale Tensor.

    Optionally converts the image to the desired format.
    The values of the output tensor are uint8 in [0, 255].

    Args:
        input (Tensor): a one dimensional uint8 tensor containing the raw bytes of the
            PNG or JPEG image.
        mode (ImageReadMode): the read mode used for optionally converting the image.
            Default: ``ImageReadMode.UNCHANGED``.
            See ``ImageReadMode`` class for more information on various
            available modes.

    Returns:
        output (Tensor[image_channels, image_height, image_width])
    )	r   r   r   r   r   Údecode_imager   r   r"   r#   r   r   r   r4   ×   s    r4   )r   r    r   c                 C   s.   t j ¡ st j ¡ sttƒ t| ƒ}t||ƒS )aA  
    Reads a JPEG or PNG image into a 3 dimensional RGB or grayscale Tensor.
    Optionally converts the image to the desired format.
    The values of the output tensor are uint8 in [0, 255].

    Args:
        path (str): path of the JPEG or PNG image.
        mode (ImageReadMode): the read mode used for optionally converting the image.
            Default: ``ImageReadMode.UNCHANGED``.
            See ``ImageReadMode`` class for more information on various
            available modes.

    Returns:
        output (Tensor[image_channels, image_height, image_width])
    )r   r   r   r   r   Ú
read_imager   r4   ©r   r    r   r   r   r   r5   ð   s    r5   c                 C   s   t | ƒ}tjj ||jd¡S )NT)r   r   r   r   r!   r"   r6   r   r   r   Ú_read_png_16  s    r7   )r%   )r%   )r.   )r.   )Úenumr   Úwarningsr   r   Ú	extensionr   Úutilsr   ÚImportErrorÚOSErrorÚer   ÚstrZTensorr   r   r   r!   Úintr'   r(   r,   r1   r3   r4   r5   r7   r   r   r   r   Ú<module>   s:   
ÿ ÿ  þ*