将图像从base64转换为图像并保存在django的数据库中

Posted

技术标签:

【中文标题】将图像从base64转换为图像并保存在django的数据库中【英文标题】:convert image from base64 to image and save in database in django 【发布时间】:2013-12-01 00:08:55 【问题描述】:

我正在尝试导出一个字符串 base64,它代表从 canvas html5 获取的图像,这是 javascript 中的代码:

var canvas1 = $("#canvas1")[0];
var ctx1 = canvas1.getContext('2d');
dataURL1 = canvas1.toDataURL();

Whit ajax 我将图像发送到服务器:

$.ajax(
    type: "POST",
    url: "/regiter_respuesta_agilidad/",
    data:
        'imagen1': dataURL1,
    
);

在 django 的 views.py 中,我使用 base64.b64decode 将字符串导出到图像:

imagen1 = request.POST['imagen1']
image_data = base64.b64decode(imagen1)
imagene = ContentFile(image_data, 'imagen1.png')
answer = Answer(imagen=imagene)

在 models.py 我有:

class Answer(models.Model):
    imagen = models.ImageField(upload_to=url)

问题是保存图像时,文件 imagen1.png 已损坏,我无法打开它,有人可以帮我解决这个问题吗?或者有其他方法吗?非常感谢。

【问题讨论】:

【参考方案1】:

代替这一行:image_data = base64.b64decode(imagen1)

使用这一行:image_data = base64.b64decode(imagen1[22:] + b'=' * (-len(imagen1[22:]) % 4))

【讨论】:

【参考方案2】:

我猜您需要从canvas.toDataURL(); 返回的数据 URI 中删除 data:

通过谷歌快速搜索发现了一些用于在 python https://gist.github.com/zacharyvoase/5538178 和另一个中解析数据 uris 的代码:dataurl.py

【讨论】:

这对我有用,我必须添加 image_data = base64.b64decode(re.search(r'base64,(.*)', request.POST['imagen1']).group(1)),因为数据 url 的第一个字符给出了 Incorrect Padding 错误。

以上是关于将图像从base64转换为图像并保存在django的数据库中的主要内容,如果未能解决你的问题,请参考以下文章

将base64中的字符串转换为图像并保存在文件系统中

php图像文件上传并转换为base64而不保存图像

在 iOS 上使用 Phonegap 将图像转换为 Base64 字符串

Rails API 回形针。上传图像将其转换为 base 64 并保存并检索它

在 Django Rest Framework 中接收 Base64 编码的图像并保存到 ImageField

将图像 url 转换为 Base64