微信小程序开发-(图片base64编码)
小程序开发
浏览:616 次

它是用于在网络上传输8位字节码的最常见的编码方法之一。它可以用于在HTTP环境中传输长标识信息。因此,在许多与图像相关的app或接口调用中,通常使用base64编码来传输图像数据。
Base64编码在小程序中不是特别完美。为了解决这个问题,本文根据具体的应用场景,总结了三种获得图像Base64编码的方法。
1.帆布图
适用场景:获取canvas绘制的图片的base64编码,并使用早期版本(1.9.9之前)的applet
缺点:画布只能绘制与屏幕大小相同的图片。当图片大小超过屏幕大小时,它无法获得某些超过屏幕大小的图片的base64编码。
canvas=wx.createCanvasContext(canvas_id)
//将图片绘制到画布上,imgPath是图片的路径
帆布drawImage(imgPath,0,0,imgWidth,imgHeight)
帆布绘制(false,()=>{
wx.canvasGetImageData({
canvasId:canvas_ id,
x: 0,
y: 0,
宽度:imgWidth,
高度:imgHeight,
成功(res){
//执行png编码
让pngData=upng.encode([res.data.buffer],res.width,res.height)
//在png数据调用接口上完成base64编码
让base64=wx.arrayBufferToBase64(pngData)
// ...
}
})
})
2.使用小程序自己的界面:
适用场景:由于微信最近改进了该界面,微信的版本要求更高(1.9.9之后);当不需要对图像进行缩放或执行其他操作时,可以获得任何大小图像的base64编码。
缺点:给定图片只能计算base64编码。更一般地,我们需要将图片的宽度缩放到小于或等于屏幕的宽度。

//基准64
让base64=wx.getFileSystemManager()。readFileSync(imgPath,“base64”)
3.通过后台服务器处理
适用场景:在获得base64编码之前,需要对图像进行预处理,如缩放。
缺点:需要部署ECS,编码速度慢。
#以下是Flask框架服务器端处理base64请求的代码,仅供参考
@app。路由('/get_base64',方法=['get','POST'])
定义trans_base64():
data_ dir='./data/image'
file_obj=请求.files[“img”]。读取()
width=int(圆形(float(request.form.get('width'))))
height=int(圆形(float(request.form.get('height'))))
img=图像.open(字节IO(文件_obj))
img=img。调整大小((宽度,高度),Image.ANTIALIAS)
output_buffer=字符串IO()
img。保存(output_buffer,format='ping')
二进制数据=output_buffer.getvalue()
base64_ data=base64.b64encode(二进制数据)
返回base64_数据
#小程序的base64请求代码
wx.upload文件({
url:'your_host_address:port/get_base64',
filePath:路径,
表单数据:{
'width':sys_width,//调整宽度。
'height':sys_width/img_radio//调整高度。
},

成功:函数(res){
让base64=res.data
安慰日志(“base64为:”,base64)
}
})
总结
以前,我在计算图像的base64编码时走了很多弯路。我一直想在没有后台交互的情况下解决这个问题。所以我看到了很多在线教程,类似于下面的代码:
urlTobase64(url){
请求({
url:url,
responseType:“arraybuffer”,
成功:res=>{
设base64=wx。阵列缓冲区到Base64(res);
基数64 = '数据:image/jpeg;base64,'+base64
控制台.log(base64)
}
})
}
wx.选择图像({
成功:res=>{
this.urlTobase64(res.tempFilePaths[0])
}
})
最初似乎没有问题,它可以在PC端的开发和测试期间正常运行,但一旦移动端用于测试,它将无法工作。后来,我想我们得到的图片的临时地址(res.tempFilePaths[0])都是从http开始的,微信明确规定不支持http类型的请求,所以在移动终端测试中会出现问题。
以上是我在小程序中分享的base64代码转换。如果你有任何问题,你可以私下评论或交流。希望以上内容能够帮助小程序开发者,避免踩到陷阱。如果你觉得这篇文章对你有用,欢迎给予奖励,
最后,欢迎使用我的小程序来阅读图片和解决单词。它完全免费:
识别图形字符