java base64字符串转换为图片
实现步骤:
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,'这一串的冒号,分号,逗号都不符合要求,所以得去掉。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2022-11-07 spring cloud项目中子模块未识别spring boot问题,java文件出现橘黄色点。未识别spring boot, 点击file-》setting -》进入搜索maven。找到配置maven的内容,取消勾选 ,或者点击勾选再取消勾选 applay
2019-11-07 Java基础 宋红康
2019-11-07 SQlServer使用SQl语句创建数据库
2019-11-07 oracle数据库创建表