Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Matplotlib graphic image to base64

Tags:

Problem : Need to transform a graphic image of matplotlib to a base64 image

Current Solution : Save the matplot image in a cache folder and read it with read() method and then convert to base64

New Problem : Annoyance : Need a workaround so I dont need to save the graphic as image in any folder. I want to just use the image in the memory. Doing unnecessary I/O is a bad practice.

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 
like image 715
KenobiBastila Avatar asked Jun 27 '16 18:06

KenobiBastila


1 Answers

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

[edit] in python3 it should be

import io my_stringIObytes = io.BytesIO() plt.savefig(my_stringIObytes, format='jpg') my_stringIObytes.seek(0) my_base64_jpgData = base64.b64encode(my_stringIObytes.read()) 

I think at least ... based on the documentation http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.savefig

like image 171
Joran Beasley Avatar answered Dec 28 '22 04:12

Joran Beasley