Django 的 ImageField 到 PIL Image 通过 HttpResponse 发送
ImageField from Django to PIL Image to send via HttpResponse
大家好,我是 Django 的新手(而且我的母语不是英语)。我正在尝试从数据库 (ImageField) 获取图像(我通过 POST 使用表单获取图像的 ID),使用 PIL Image 裁剪它并通过 HttpResponse 发送它。它没有给出错误,但是当我收到图像 "piece.jpg" 时,它是一个损坏的文件。如果我用记事本打开它,我只能看到:
<PIL.Image.Image image mode=RGB size=46x75 at 0x3DEA790>
这是我在 views.py
中的代码:
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
发送它,因为我希望它可以在该页面上下载。
HttpResponse
需要字符串或迭代器。文档中的更多详细信息:
https://docs.djangoproject.com/en/1.9/ref/request-response/#django.http.HttpResponse.init
你试过这样的事情吗?
response = HttpResponse(mimetype='image/jpg')
cropped_image.save(response, "JPEG")
return response
这帮助我找到了解决方案!您的代码在浏览器中打开图像(没关系,因为我没有说我想要它作为下载)。要获取下载对话框,代码为:
response = HttpResponse(content_type='image/jpg')
cropped_image.save(response, "JPEG")
response['Content-Disposition'] = 'attachment; filename="piece.jpg"'
return response
谢谢先生:)
大家好,我是 Django 的新手(而且我的母语不是英语)。我正在尝试从数据库 (ImageField) 获取图像(我通过 POST 使用表单获取图像的 ID),使用 PIL Image 裁剪它并通过 HttpResponse 发送它。它没有给出错误,但是当我收到图像 "piece.jpg" 时,它是一个损坏的文件。如果我用记事本打开它,我只能看到:
<PIL.Image.Image image mode=RGB size=46x75 at 0x3DEA790>
这是我在 views.py
中的代码:
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
发送它,因为我希望它可以在该页面上下载。
HttpResponse
需要字符串或迭代器。文档中的更多详细信息:
https://docs.djangoproject.com/en/1.9/ref/request-response/#django.http.HttpResponse.init
你试过这样的事情吗?
response = HttpResponse(mimetype='image/jpg')
cropped_image.save(response, "JPEG")
return response
这帮助我找到了解决方案!您的代码在浏览器中打开图像(没关系,因为我没有说我想要它作为下载)。要获取下载对话框,代码为:
response = HttpResponse(content_type='image/jpg')
cropped_image.save(response, "JPEG")
response['Content-Disposition'] = 'attachment; filename="piece.jpg"'
return response
谢谢先生:)