B
    eJd
                 @   s`   d dl mZ d dlZddlmZmZ yd dlmZ dZW n e	k
rP   dZY nX dddZ
dS )    )BytesION   )Writer
from_array)ImageTFpil   pngc          	   C   s  |dk s|dkrt dd}| jdkr,d}nH| jdkrJ| jd dkrJd	}n*| jdkrl| jd d
krld}d}nt d|dkrtrdnd}|dkr|dkrt d|dkrD| j}| j}|dkr| |d |d |d  f} t|d |d |dk||d}t| |d}	d}
t ,}|||	j	 |
t
| d }W dQ R X nxtsRtdt| }|dksp|dkrzd}
d}nd}
d}t .}|j|||d |
t
| d }W dQ R X |S )a  Converts a numpy array of uint8 into a base64 png or jpg string.

    Parameters
    ----------
    img: ndarray of uint8
        array image
    backend: str
        'auto', 'pil' or 'pypng'. If 'auto', Pillow is used if installed,
        otherwise pypng.
    compression: int, between 0 and 9
        compression level to be passed to the backend
    ext: str, 'png' or 'jpg'
        compression format used to generate b64 string
    r   	   z*compression level must be between 0 and 9.F   L   RGBr   ZRGBATzInvalid image shapeautor   Zpypngr	   z6jpg binary strings are only available with PIL backendr   )Z	greyscalealphacompression)modezdata:image/png;base64,zutf-8Nzapillow needs to be installed to use `backend='pil'. Pleaseinstall pillow or use `backend='pypng'.ZjpgZjpegzdata:image/jpeg;base64,)formatZcompress_level)
ValueErrorndimshapepil_importedZreshaper   r   r   writerowsbase64	b64encodegetvaluedecodeImportErrorr   Z	fromarraysave)Zimgbackendr   extr   r   r   shwZimg_pngprefixstreamZbase64_stringZpil_img r'   J/var/www/html/venv/lib/python3.7/site-packages/_plotly_utils/data_utils.pyimage_array_to_data_uri   sP    

$
"r)   )r   r   r	   )ior   r   r	   r   r   ZPILr   r   r   r)   r'   r'   r'   r(   <module>   s   
