django:从视图返回图像数据

14 投票
2 回答
10947 浏览
提问于 2025-04-17 08:15

我想要一个视图来返回图片数据,类似于下面这样的代码:

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

我知道可以用 file.read() 来获取图片数据,但因为这个图片很小(比如1x1像素),我想直接把它存成一个字符串对象(或者其他我可以在代码中复制粘贴的对象)。这样的话,每次访问这个视图时,就不用再去查找磁盘上的文件了。

我该怎么做呢?我觉得这应该很简单,只是不知道该用什么词去搜索。

附注:我知道在Django中通常不是这样提供图片的。

2 个回答

1

你可以考虑使用 base64。不过你可能会发现,性能提升几乎没什么意义,因为你的图片会存储在磁盘缓存里。我很想看看 base64 解码和磁盘访问的性能对比。你甚至可能会发现,这种优化反而会适得其反。

补充:我找到了一些关于 Linux 磁盘缓存 的内容,你在做决定时可能会觉得有趣。只要你的磁盘活动不是太高,这张小图片被存储在磁盘缓存里的可能性还是挺大的。

14

这里有一个来自 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
    """

撰写回答