django:从视图返回图像数据
我想要一个视图来返回图片数据,类似于下面这样的代码:
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
"""