2010-06-09 63 views
0

我想用Pycairo生成一個動態創建的png圖像併爲它使用Django。我讀到:Serve a dynamically generated image with Django使用Pycairo動態生成圖像並在Django中提供服務

有沒有辦法將數據從Pycairo表面直接傳輸到HTTP響應中?我這樣做,現在:

data = surface.to_rgba() 
im = Image.frombuffer ("RGBA", (width, height), data, "raw", "RGBA", 0,1) 
response = HttpResponse(mimetype="image/png") 
im.save(response, "PNG") 
return response 

但它實際上行不通,因爲沒有一個to_rgba調用(此調用,我發現使用谷歌的代碼,但不工作)。

編輯:to_rgba可以被正確的調用get_data()取代,但我仍然想知道是否可以完全繞過PIL。

回答

7
def someView(request): 
    surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 100, 100) 
    context = cairo.Context(surface) 
    # Draw something ... 

    response = HttpResponse(mimetype="image/png") 
    surface.write_to_png(response) 
    return response 
+0

謝謝,我還沒有測試它,因爲我實際上是問這個問題的朋友。但這看起來完全像我所要求的。謝謝。 – huggie 2010-06-17 06:28:44

+0

在django 1.7中,'mimetype'參數被重命名爲'content_type' – 2015-03-09 15:35:43

0

你可以試試這個: http://www.stuartaxon.com/2010/02/03/using-cairo-to-generate-svg-in-django/ 這是關於SVG,但我認爲它會很容易適應

+0

與SVG的問題是,IE還沒有支持它。所以我寧願使用靜態圖像解決方案。 – huggie 2010-06-11 06:41:29

+0

替換 mimetype ='image/svg + xml' with mimetype ='image/png' 。 在cairodraw.draw_widget只是 surface.finish() 加 surface.write_to_png(dest) – miga 2010-06-11 21:37:17