Как преобразовать изображение pyplot в байтах

#python #matplotlib

#python #matplotlib

Вопрос:

Я хочу преобразовать изображение, созданное с помощью pyplot, в байты и записать эти байты в файл, чтобы сохранить мой график в виде изображения на моем компьютере.

По посторонним причинам я не могу использовать savefig для сохранения графика непосредственно в файле

Со всей информацией, полученной в Интернете, и из других вопросов я пришел к этому моменту:

     plt.hist(arg)
    plt.show()
    bio = BytesIO()
    plt.savefig(bio, format="png")

#    bio.seek(0)
#    print(bio.read())                  FIRST print
    bio.seek(0)
    my_base64_jpgData = base64.b64encode(bio.read())


    result["image"] = my_base64_jpgData
  

И в конце моего кода я делаю следующее:

     result = handler(input)
    file = open("image.png", "wb")
#   print(base64.b64decode(result["image"]))         SECOND print
    file.write(base64.b64decode(result["image"]))
    file.close()
  

Проблема, с которой я сталкиваюсь, заключается в том, что и первая, и вторая печать печатают одно и то же, но очевидно, что если я запишу это в файл, файл будет полностью белым, потому что в нем есть некоторая ненужная информация, фактически это то, что возвращают две печати:

 b'x89PNGrnx1anx00x00x00rIHDRx00x00x02x80x00x00x01xe0x08x06x00x00x005xd1xdcxe4x00x00x009tEXtSoftwarex00Matplotlib version3.3.1, https://matplotlib.org/xddxddxfcxf3x00x00x00tpHYsx00x00x0fax00x00x0fax01xa8?xa7ix00x00x08xc9IDATxx9cxedxd61x01x00 x0cxc00xc0xbfxe7xe1x02x8eamp;nzvxcfxcc,x00x002xcexefx00x00x00xde2x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00bx0c x00@x8cx01x04x00x881x80x00x001x06x10x00 xc6x00x02x00xc4x18@x00x80x18x03x08x00x10cx00x01x00b.amp;yx07xbcxa7xa7xb2bx00x00x00x00IENDxaeB`x82'
  

Как вы можете видеть, почти сразу появляется, 0x00x009tEXtSoftwarex00Matplotlib version3.3.1, https://matplotlib.org/xddxdd и я думаю, что для этого изображение, image.png которое создает мой код, является белым изображением.

Вы знаете, как я могу решить эту проблему?

Ответ №1:

Я сам нахожу, как решить проблему (но я не понимаю, почему это работает), я надеюсь, что это поможет кому-то в будущем.

Проблема в «просто» строке plt.show() , удалив эту строку, она будет работать правильно.