首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Django到PIL图像的ImageField通过HttpResponse发送

从Django到PIL图像的ImageField通过HttpResponse发送
EN

Stack Overflow用户
提问于 2016-07-04 11:15:26
回答 2查看 3.2K关注 0票数 1

嗨,我是Django的新手(而且我不是讲英语的)。我试图从数据库(ImageField)获取一个图像(我通过POST获取图像的id ),用PIL进行裁剪并通过HttpResponse发送它。它不会给出错误,但是当我收到图像"piece.jpg“时,它是一个损坏的文件。如果我使用记事本打开它,我只能看到:

代码语言:javascript
复制
    <PIL.Image.Image image mode=RGB size=46x75 at 0x3DEA790>

这是我在views.py中的代码

代码语言:javascript
复制
    from PIL import Image

    def function(request):

        if request.method == 'POST':

            id = request.POST.get('id')
            object = Document.objects.get(pk=id)

            im = Image.open(object.docfile)

            left = 10
            top = 10
            right = 100
            bottom = 100
            cropped_image = im.crop( (left, top, right, bottom) )

            response = HttpResponse(cropped_image, content_type='image/jpg')
            response['Content-Disposition'] = 'attachment; filename="piece.jpg"'
            return response

我试着只发送"object.docfile“就行了。但是如果我试图发送"im“(这是一个PIL图像),它就不起作用了。

我需要通过HttpResponse发送它,因为我希望它作为一个可下载的页面。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-04 11:45:01

HttpResponse需要字符串或迭代器。文档中的更多细节:

init

你试过这样的东西吗?

代码语言:javascript
复制
response = HttpResponse(mimetype='image/jpg')
cropped_image.save(response, "JPEG")
return response
票数 1
EN

Stack Overflow用户

发布于 2016-07-04 12:05:12

这帮我找到了解决办法!您的代码在浏览器中打开图像(这很好,因为我没有说我希望它作为下载)。要获得下载对话框,代码如下:

代码语言:javascript
复制
    response = HttpResponse(content_type='image/jpg')
    cropped_image.save(response, "JPEG")
    response['Content-Disposition'] = 'attachment; filename="piece.jpg"'
    return response

谢谢您,先生:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38183374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档