복붙노트

[PYTHON] matplotlib - 이미지를 변수에 저장

PYTHON

matplotlib - 이미지를 변수에 저장

matplotlib에 의해 생성 된 이미지를 변수 raw_data에 저장하여 인라인 이미지로 사용하고 싶습니다.

import os
import sys
os.environ['MPLCONFIGDIR'] = '/tmp/'
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt

print "Content-type: image/png\n"
plt.plot(range(10, 20))

raw_data = plt.show()

if raw_data:
    uri = 'data:image/png;base64,' + urllib.quote(base64.b64encode(raw_data))
    print '<img src = "%s"/>' % uri
else:
    print "No data"

#plt.savefig(sys.stdout, format='png')

내 유스 케이스에 맞는 함수는 없다.

해결법

  1. ==============================

    1.cStringIO 나 그와 비슷한 것을 사용해 보셨습니까?

    cStringIO 나 그와 비슷한 것을 사용해 보셨습니까?

    import os
    import sys
    import matplotlib
    import matplotlib.pyplot as plt
    import StringIO
    import urllib, base64
    
    plt.plot(range(10, 20))
    fig = plt.gcf()
    
    imgdata = StringIO.StringIO()
    fig.savefig(imgdata, format='png')
    imgdata.seek(0)  # rewind the data
    
    print "Content-type: image/png\n"
    uri = 'data:image/png;base64,' + urllib.quote(base64.b64encode(imgdata.buf))
    print '<img src = "%s"/>' % uri
    
  2. ==============================

    2.완성 된 python 3 버전, Paul의 답변과 메타perture의 의견을 정리합니다.

    완성 된 python 3 버전, Paul의 답변과 메타perture의 의견을 정리합니다.

    import matplotlib.pyplot as plt
    import io
    import urllib, base64
    
    plt.plot(range(10))
    fig = plt.gcf()
    
    buf = io.BytesIO()
    fig.savefig(buf, format='png')
    buf.seek(0)
    string = base64.b64encode(buf.read())
    
    uri = 'data:image/png;base64,' + urllib.parse.quote(string)
    html = '<img src = "%s"/>' % uri
    
  3. from https://stackoverflow.com/questions/5314707/matplotlib-store-image-in-variable by cc-by-sa and MIT license