web-dev-qa-db-fra.com

comment enregistrer une figure pylab dans un fichier en mémoire qui peut être lu dans une image PIL?

nouveau sur PIL, mais souhaite en obtenir une solution rapide. Ce qui suit est mon premier coup qui ne fonctionne jamais:

import cStringIO
import pylab
from PIL import Image
pylab.figure()
pylab.plot([1,2])
pylab.title("test")
buffer = cStringIO.StringIO()
pylab.savefig(buffer, format='png')
im = Image.open(buffer.read())
buffer.close()

l'erreur dit,

Traceback (most recent call last):
  File "try.py", line 10, in <module>
    im = Image.open(buffer.read())
  File "/awesomepath/python2.7/site-packages/PIL/Image.py", line 1952, in open
    fp = __builtin__.open(fp, "rb")

des idées? Je ne veux pas que la solution implique des packages supplémentaires, merci.

51
nye17

N'oubliez pas d'appeler buf.seek(0) pour que Image.open(buf) commence à lire depuis le début de buf:

import io
from PIL import Image
import matplotlib.pyplot as plt

plt.figure()
plt.plot([1, 2])
plt.title("test")
buf = io.BytesIO()
plt.savefig(buf, format='png')
buf.seek(0)
im = Image.open(buf)
im.show()
buf.close()
78
unutbu