将图像从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的数据库中的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 上使用 Phonegap 将图像转换为 Base64 字符串
Rails API 回形针。上传图像将其转换为 base 64 并保存并检索它