【问题标题】:convert image from base64 to image and save in database in django将图像从base64转换为图像并保存在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 已损坏,我无法打开它,有人可以帮我解决这个问题吗?或者有其他方法吗?非常感谢。

【问题讨论】:

    标签: javascript python ajax django html


    【解决方案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 错误。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-24
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      • 2013-10-20
      • 2020-10-01
      相关资源
      最近更新 更多