2011-12-22 17 views
25

yeni, ancak bunun dışında hızlı bir çözüm almak istiyorum.Pylab rakamını PIL görüntüsüne okunabilen bellek içi dosyaya nasıl kaydedebilirim? PIL için

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() 

hata diyor

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") 

herhangi bir fikir: çalıştığını asla benim ilk atış şudur? Çözümün ekstra paketler içermesini istemiyorum, teşekkürler.

cevap

46

buf.seek(0) yüzden Image.open(buf) başlar buf ait baştan okumaya aramayı unutmayın:

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() 
+0

Müthiş! Bir çekicilik gibi çalışır! io.BytesIO'yu orijinal 'StringIO'yla değiştirdiğimde bile. Burada eskiyi neden kullanmayı seçtiğini hatırlatabilir misin? Teşekkürler! – nye17

+1

Python2.6 veya daha iyisi için ileriye dönük uyumluluk için 'cStringIO.StringIO' yerine' io.BytesIO' kullanın. Python3'te, "cStringIO", "StringIO" modülleri gitti. İşlevleri "io" modülünde. – unutbu

+0

gotcha, teşekkürler! – nye17