菜鸟笔记
提升您的技术认知

base64字符串转换为图片-ag真人游戏

实现步骤:

base64字符串长这样'"data:image/png;base64,ivborw0kggoaaaan(中间省略好多字符串)aaaabjru5erkjggg=='

方法一:

首先,图片本质上是一种二进制文件,所以创建一张图片,就是创建一个文件,里面写入二进制的数据。

# 参数avatar接收base64字符串
# 1.截取掉base64开头的data:image/png;base64,
avatar_str = avatar.replace('data:image/png;base64,', '')
# 2.base64转换为bytes类型
avatar_bytes = base64.b64decode(avatar_str)
# 3.创建一张图片,将bytes类型的数据写入图片中
with open('./1.jpg', 'wb ') as fp:
    fp.write(avatar_bytes)

图片的名字看自己需求取,后缀记得是png或jpg这样类似的图片格式,不能是txt这些。

方法二:

若前端使用img标签src来接收图片地址,那我们也可将base64字符串直接传给前端就行,src是可以接收base64字符串显示图片的。

但是base64字符串还是太长了,存储在数据库中太占资源,我们可以把它上传到图片存储服务器如fastfds,返回文件索引给我们,这样存储这个索引在我们的数据库,就能减少占用的磁盘空间了。前端需要调用,就将服务器ip地址 端口 文件索引发送给前端,就能显示图片了。

实现代码如下:

# 获取前端传来的base64字符串--》avatar 
# 去掉头部的'data:image/png;base64,'
avatar_str = avatar.replace('data:image/png;base64,', '')
# 将base64字符串转换为bytes
avatar_bytes = base64.b64decode(avatar_str)
# 创建fdfs实例
client = fdfs_client(fdfs的client.conf所在路径)
# 上传图片至fdfs
ret = client.upload_by_buffer(avatar_bytes)
# 判断上传是否成功,是则保存图片地址到数据库
if ret['status'] == 'upload successed.':
    user.user_pic = ret['remote file_id']
    user.save()

 此时数据库存储的是文件索引,我们要多加一步,将完整的路径拼接了再传给前端,这样img的src接收到这个路径,就能正常显示图片。这个方法比方法一少了一步创建图片文件,能减少在自己本机的磁盘资源被占用。

注意:

1.为何要去掉base64开头的'data:image/png;base64,'呢?

因为符合base64的字符有字母、数字、 、/、=这5种,'data:image/png;base64,'这一串的冒号,分号,逗号都不符合要求,所以得去掉。

网站地图