[英]Save image temporarily using io for pre-processing without using disk resources
我当前的项目要求我在保存文件之前先处理上传的文件(主要是图像)以进行预处理。
到目前为止,我的主要方法是上传到Amazon s3,然后下载并对其进行处理。
这并不理想,因为我真的不需要保存上传的图像,而需要保存最终产品。
是否可以使用io模块将Django InMemoryUploadedFile保存为字节,然后以某种方式从中返回实际图像? 到目前为止,我的尝试惨败。 也许我不一定对io模块了解得很好。
def temp_file(f):
"""
CREATES TEMP FILE THAT DOES NOT GET UPLOADED
f is the InMemoryUploadedFile of image
"""
buffer = io.BytesIO()
buffer.write(f.read())
image = buffer.read()
buffer.close()
img = Image.open(image)
return img
如果您希望将上传的图像集成到PDF中,则可能需要以下方法:
from io import BytesIO
from PIL import Image
from reportlab.pdfgen import canvas
def upload_view(request):
image = request.FILES['image']
imagebuffer = BytesIO()
for chunk in image.chunks():
imagebuffer.write(chunk)
image = Image.open(imagebuffer)
imagebuffer.close()
response = HttpResponse(content_type='application/pdf')
c = canvas.Canvas(response)
c.drawImage(image, x, y)
...
Image.open()
需要文件名或类似对象的文件(具有read()
, seek()
和tell()
方法)。 因此,您必须将buffer
对象提供给Image.open()
。 未关闭并倒回开始。
def temp_file(f):
return Image.open(io.BytesIO(f.read()))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.