问题 django:从视图返回图像数据


我想要一个视图来返回图像数据。所以有些东西

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

我知道我能做到 file.read() 获取图像数据,但由于图像很小(如1x1像素),我想将其存储为字符串对象(或者我可以复制并粘贴到我的代码中的任何对象)。这样,每次查看视图时,我都会自行保存磁盘查找。

我该怎么做?我确信这很容易,我只是不确定用于搜索的术语。

附:我知道用Django通常不会以这种方式提供图像。


4307
2017-12-13 01:38


起源



答案:


这是一个简单的例子 django-openid项目

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

11
2017-12-13 02:56



如果您关注性能,您还可以在加载模块时解码Base64字符串,而不是每次请求时解码: OPENID_LOGO = OPENID_LOG_BASE64.decode('base64') - dkamins


答案:


这是一个简单的例子 django-openid项目

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

11
2017-12-13 02:56



如果您关注性能,您还可以在加载模块时解码Base64字符串,而不是每次请求时解码: OPENID_LOGO = OPENID_LOG_BASE64.decode('base64') - dkamins


你可以考虑使用 BASE64。但是您可能会发现性能提升几乎无关紧要,因为您的映像将存储在磁盘缓存中。我很想看到base64解码与磁盘访问的基准。您甚至可能会发现此优化会产生相反的效果。

编辑:我发现了这个 linux磁盘缓存上的页面 在做出这个决定时你可能会有兴趣阅读。只要您的磁盘活动不是太高,这个微小图像成为磁盘缓存一部分的可能性似乎很可能。


1
2017-12-13 01:45