繁体   English   中英

使用io临时保存图像以进行预处理,而无需使用磁盘资源

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM