python - 渲染图像而不保存

标签 python django

我想从用户那里获取图像,在 beckend 使用它并将结果呈现给用户。是否可以不将图像保存在磁盘上?

我的看法:

class InputImageForm(forms.Form):
    image = forms.ImageField()


def get_image(request):
    if request.method == 'POST':
        form = InputImageForm(request.POST, request.FILES)
        if form.is_valid():
            image = request.FILES['image']
            #some actions with image
            return render_to_response('results.html', {'image': image})
        else:
           form = InputImageForm()
    else:
        raise Http404

在模板中,标签 {{ image }} 返回文件名。

最佳答案

问题在于,向用户返回页面通常会涉及两个请求:一个针对 HTML 页面,另一个针对该 HTML 中的 img 标记所引用的图像本身。但是正如您所说,如果同时不将其存储在任何地方,图像就会丢失。

还有一种选择:您可以使用 data uri在 html 中包含内联图像的实际数据。这意味着您不必跨请求保留它,因为所有内容都将一次返回。大多数浏览器都支持数据 uri,包括 ie8+。

您可以像这样格式化数据,例如:

from base64 import b64encode

encoded = b64encode(img_data)
mime = "image/jpeg"
uri = "data:%s;base64,%s" % (mime, encoded)

并直接在模板中使用:
<img src="{{ uri }}">

关于python - 渲染图像而不保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24219446/

相关文章:

python - Django模型继承: create sub-instance of existing instance (downcast)?

html - 使用 Django 模板插入扩展背景色

python - 如何在 Django 中创建对象队列?

python - Django REST Framework 序列化 ForeignKey 和 ManyToManyFields

ajax - 使用 Ajax 调用更新 Django View

python - Sklearn SGDClassifier 部分拟合

Python 系统日志记录器不能写入超过 2048 个字符

python - 数据库错误: no such table: django_template

python - Django:过滤请求结果以仅包含与请求用户相关的数据

适用于Web开发的Python还是Ruby?