2012-01-10 62 views
6

返回內存PIL像我看過很多帖子像this one,詳細說明了如何使用WSGI返回動態圖像。但是,我看到的所有例子都是以二進制格式打開一個圖像,讀取它然後返回這些數據(這對我來說很好)。如何從WSGI應用

我被困在試圖使用內存中的PIL圖像對象實現相同的事情。我不想將圖像保存到文件中,因爲我已經有內存中的圖像。

有鑑於此:

fd = open(aPath2Png, 'rb') 
base = Image.open(fd) 
... lots more image processing on base happens ... 

我已經試過這樣:

data = base.tostring() 
response_headers = [('Content-type', 'image/png'), ('Content-length', len(data))] 
start_response(status, response_headers) 
return [data] 

WSGI將返回給客戶的罰款。但是,我會收到圖像錯誤,說圖像返回有問題。

還有什麼其他方法?

回答

11

請參閱Image.save()。它可以帶一個文件對象,在這種情況下你可以將它寫入一個StringIO實例。因此類似於:

output = StringIO.StringIO() 
base.save(output, format='PNG') 
return [output.getvalue()] 

您將需要檢查可用於格式的值。

+0

從** mod_wsgi的答覆**人自己......在interwebs是如此之小。這就像一個魅力。我沒有最終在響應頭文件中設置Content-Length ......非常感謝。 – angeloHarpy 2012-01-11 17:24:48