如何从响应中获取图像并将其保存在models.ImageField中

时间:2016-05-24 14:02:41

标签: python django image-processing

问这个我意识到这个话题很常见,也许已经多次讨论了。但它仍然不清楚,所以我试图从响应中获取图像文件,调整大小并将其保存在模型中。我处理错误:

  

/ saveimage /中的AttributeError   ' InMemoryUploadedFile'对象没有属性' get'

我的代码是这样的:

import Image
import cStringIO
from django.core.files.uploadedfile import InMemoryUploadedFile
def get_and_save_image():
    file = cStringIO.StringIO()
    size = (200,200)
    color = (255,0,0,0)
    image = Image.new("RGBA", size, color)
    image.save(file, format='JPEG')
    image_file = InMemoryUploadedFile(file, None, 'foo.jpg', 'jpeg', None, None)
    image_file.seek(0)
    return image_file

Http回复:

FILES:
some_image = <InMemoryUploadedFile: image.jpg (image/jpeg)>

将图像保存到ImageField是否正确?提前谢谢。

1 个答案:

答案 0 :(得分:0)

以下两种方法可以做到这一点:

  1. 将图像保存在models.ImageField中,然后在响应中返回图像的url,您可以在javascript中创建图像元素并添加网址。

  2. 在base64中对图像的数据进行编码,并将其作为字符串返回,您可以在前端轻松使用。这是一个例子:

  3. 后端:

    from PIL import Image
    from io import BytesIO
    import base64
    def get_and_save_image():
        size = (200,200)
        color = (255,0,0,0)
        image = Image.new("RGBA", size, color)
        img_buffer = BytesIO()
        image.save(img_buffer, format='JPEG')
        response_string = base64.b64encode(img_buffer.getvalue())
        return response_string
    

    前端:

    <img src="data:image/jpg;base64,{{ THE_RESPONSE_STRING }}">