Python сохранить рисунок Matplotlib на объект изображения PIL - PullRequest
11 голосов
/ 15 октября 2010

HI, возможно ли, что я создал изображение из matplotlib и сохранил его на объекте изображения, созданном из PIL? Звучит очень сложно? Кто может мне помочь?

Ответы [ 2 ]

15 голосов
/ 29 ноября 2010

Чтобы отобразить изображения Matplotlib на веб-странице в Django Framework:

  • создать график matplotlib

  • сохранить его в виде файла png

  • сохранить это изображение в строковом буфере (используя PIL)

  • передать этот буфер в HttpResponse * Джанго1020 * (set mime type image / png)

  • , который возвращает объект ответа (в данном случае визуализированный график).

Другими словами, все эти шаги должны быть помещены в функцию Django view , в views.py :

from matplotlib import pyplot as PLT
import numpy as NP
import StringIO
import PIL
from django.http import HttpResponse 


def display_image(request) :
    # next 5 lines just create a matplotlib plot
    t = NP.arange(-1., 1., 100)
    s = NP.sin(NP.pi*x)
    fig = PLT.figure()
    ax1 = fig.add_subplot(111)
    ax1.plot(t, s, 'b.')

    buffer = StringIO.StringIO()
    canvas = PLT.get_current_fig_manager().canvas
    canvas.draw()
    pil_image = PIL.Image.fromstring('RGB', canvas.get_width_height(), 
                 canvas.tostring_rgb())
    pil_image.save(buffer, 'PNG')
    PLT.close()
    # Django's HttpResponse reads the buffer and extracts the image
    return HttpResponse(buffer.getvalue(), mimetype='image/png')
3 голосов
/ 18 марта 2016

У меня был тот же вопрос, и я наткнулся на этот ответ.Просто хотел добавить к приведенному выше ответу, что PIL.Image.fromstring устарел, и теперь следует использовать frombytes вместо fromstring.Следовательно, мы должны изменить строку:

pil_image = PIL.Image.fromstring('RGB', canvas.get_width_height(), 
                 canvas.tostring_rgb())

до

pil_image = PIL.Image.frombytes('RGB', canvas.get_width_height(), 
                 canvas.tostring_rgb())
...