Python save matplotlib figure on an PIL Image object

前端 未结 2 1046
星月不相逢
星月不相逢 2021-02-02 00:15

HI, is it possible that I created a image from matplotlib and I save it on an image object I created from PIL? Sounds very hard? Who can help me?

2条回答
  •  渐次进展
    2021-02-02 00:25

    To render Matplotlib images in a webpage in the Django Framework:

    • create the matplotlib plot

    • save it as a png file

    • store this image in a string buffer (using PIL)

    • pass this buffer to Django's HttpResponse (set mime type image/png)

    • which returns a response object (the rendered plot in this case).

    In other words, all of these steps should be placed in a Django view function, in 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')
    

提交回复
热议问题