gpt4 book ai didi

python - 将base64图像数据上传并保存到django rest框架中的Django图像字段

转载 作者:行者123 更新时间:2023-12-05 07:35:07 26 4
gpt4 key购买 nike

我在将 base64 图像数据保存到 django 图像字段时遇到问题,这是我尝试过的方法:

所以基本上我使用 axios POST 请求从前端接收 base64 图像数据。然后在我的 django rest framework api View 中处理图像数据。

我尝试了两种变体:

1) 将解码后的 base64 写入临时文件,然后将其传递给 imageField

2) 使用 PIL.Image.open(img_temp) 打开 TemporaryFile,然后将 PIL.Image 转换为 InMemoryUploadedFile 并将其传递给 imageField

但是在这两种情况下我都会得到一个错误:image
:
[“上传有效图片。您上传的文件不是图片或损坏的图片。”]

我不太清楚为什么会出现此错误,因为当我使用 img.show() 时,图像效果很好。

Django 休息框架

        base64_data = request.data['image_data'][22:]
decode_image = base64.b64decode(base64_data)
img_temp = TemporaryFile()
img_temp.write(decode_image)
img_temp.flush()

img = PIL.Image.open(img_temp)
img_format = '.' + img.format
img.show()

image_io = BytesIO()
img.save(image_io, format=img.format)
file = InMemoryUploadedFile (
image_io,
None,
'photo' + img_format,
'image/' + img.format,
sys.getsizeof(image_io),
None,
)
img.close()

data = {
'image': File(img_temp) # I have tried passing File(img_tem) and "file" into the image field
}

serializer = ListSerializer(data=data, context={'request': request})
if serializer.is_valid():
instance = serializer.save()
instance.save()

最佳答案

更新:想通了

        base64_data = request.data['image_data'][22:]
decode_image = base64.b64decode(base64_data)

img = PIL.Image.open(BytesIO(decode_image))
img_format = '.' + img.format
img.show()

fileData = BytesIO(decode_image)
file = InMemoryUploadedFile ( # arguments: 'file', 'field_name', 'name', 'content_type', 'size', and 'charset'
fileData,
None,
'photo' + img_format,
'image',
len(decode_image),
None,
)
img.close()

data = {
'image': file
}

serializer = ListSerializer(data=data, context={'request': request})
if serializer.is_valid():
instance = serializer.save()
instance.save()

关于python - 将base64图像数据上传并保存到django rest框架中的Django图像字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49712834/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com