2011-12-13 103 views
10

我想要一個視圖來返回圖像數據。所以沿django:從視圖返回圖像數據

return HttpResponse(image_data, mimetype=」image/png」) 

我知道線的東西我可以做一個file.read()得到的圖像數據,但由於圖像較小(如1×1像素)我想只是將其存儲爲一個字符串對象(或任何對象我可以複製並粘貼在我的代碼中)。這樣,每次查看視圖時,我都會自己保存磁盤查找。

我該如何解決這個問題?我確信這很容易,我只是不確定要使用什麼條款進行搜索。

p.s.我知道一個人通常不會用Django這種方式提供圖像。

回答

11

下面是從django-openid project

def logo(request): 
    return HttpResponse(
     OPENID_LOGO_BASE_64.decode('base64'), content_type='image/gif' 
    ) 
    # Logo from http://openid.net/login-bg.gif 
    # Embedded here for convenience; you should serve this as a static file 
    OPENID_LOGO_BASE_64 = """ 
    R0lGODlhEAAQAMQAAO3t7eHh4srKyvz8/P5pDP9rENLS0v/28P/17tXV1dHEvPDw8M3Nzfn5+d3d 
    3f5jA97Syvnv6MfLzcfHx/1mCPx4Kc/S1Pf189C+tP+xgv/k1N3OxfHy9NLV1/39/f///yH5BAAA 
    AAAALAAAAAAQABAAAAVq4CeOZGme6KhlSDoexdO6H0IUR+otwUYRkMDCUwIYJhLFTyGZJACAwQcg 
    EAQ4kVuEE2AIGAOPQQAQwXCfS8KQGAwMjIYIUSi03B7iJ+AcnmclHg4TAh0QDzIpCw4WGBUZeikD 
    Fzk0lpcjIQA7 
    """ 
+0

一個簡單的例子,如果你關心性能,你也可以一次當你加載模塊,而不是每次它要求的時間進行解碼的Base64編碼字符串:'OPENID_LOGO = OPENID_LOG_BASE64 .decode( '的base64')' – dkamins

1

您可以考慮使用base64。但是您可能會發現性能提升幾乎無關緊要,因爲您的映像將存儲在磁盤緩存中。我希望看到base64解碼與磁盤訪問的基準。你甚至可能會發現這種優化會產生相反的效果。

編輯:我發現這個page on the linux disk cache,你做這個決定時你可能會有興趣閱讀。只要你的磁盤活動不太高,這個微小的映像成爲磁盤緩存的一部分的可能性似乎很可能。