2012-01-11 13 views
12

Problem polega na załadowaniu obrazu z kodem jpeg z pamięci.Obrazowanie w języku Python: ładowanie jpeg z pamięci

Otrzymuję ciąg z gniazdka:

jpgdata = self.rfile.read(sz) 

i wiem, że jest zakodowany obraz jpeg.

Potrzebuję go rozszyfrować. Najbardziej głupie rozwiązanie:

o = open("Output/1.jpg","wb") 
o.write(jpgdata) 
o.close() 
dt = Image.open("Output/1.jpg") 

Pytanie brzmi, jak zrobić to samo w pamięci?

Odpowiedz

15

Obiekt Image.open PIL akceptuje dowolny obiekt podobny do pliku. Oznacza to, że można owinąć danych obrazu na obiekcie StringIO i przekazać go do Image.Open

from cStringIO import StringIO 
file_jpgdata = StringIO(jpgdata) 
dt = Image.open(file_jpgdata) 

Lub spróbuj tylko przejazdem self.rfile jako argument do Image.open - może to działać tak samo dobrze. (To jest dla Python 2 - dla użycia Python 3 from io import BytesIO)

0

Użyj StringIO, aby obraz mógł uzyskać dostęp do twoich danych tak, jakby był plikiem.