2016-06-27 3 views
1

Проблема: нужно преобразовать графическое изображение Matplotlib в base64 изображениеMatplotlib графическое изображение base64

Текущее решение: Сохранить matplot изображение в папке кэша и прочитать его с помощью метода чтения() и затем преобразовать в base64

Новая проблема: Досада: Нужно обходное решение, поэтому мне не нужно сохранять графику как изображение в любой папке. Я хочу просто использовать изображение в памяти. Выполнение ненужных операций ввода-вывода является плохой практикой.

def save_single_graphic_data(data, y_label="Loss", x_label="Epochs", save_as="data.png"): 
    total_epochs = len(data) 
    plt.figure() 
    plt.clf() 

    plt.plot(total_epochs, data) 

    ax = plt.gca() 
    ax.ticklabel_format(useOffset=False) 

    plt.ylabel(y_label) 
    plt.xlabel(x_label) 

    if save_as is not None: 
     plt.savefig(save_as) 

    plt.savefig("cache/cached1.png") 

    cached_img = open("cache/cached1.png") 

    cached_img_b64 = base64.b64encode(cached_img.read()) 

    os.remove("cache/cached1.png") 

    return cached_img_b64 

ответ

3
import cStringIO 
my_stringIObytes = cStringIO.StringIO() 
plt.savefig(my_stringIObytes, format='jpg') 
my_stringIObytes.seek(0) 
my_base64_jpgData = base64.b64encode(my_stringIObytes.read()) 

Я думаю, по крайней мере ... на основе документации http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.savefig

+0

Спасибо! Отлично работает! – KenobiShan

+0

Если вы используете Python 3 или выше, вам нужно использовать 'io.BytesIO', как указано @nobar по адресу https://stackoverflow.com/a/18284900/1802726. –