小顺序echarts+canvasdrawer完成页面转化图片并保留到相册
场景:小顺序测试运动,完成echarts雷达图展现差别的结果、微信头像、二维码、测试结果笔墨,终究绘制出一张图片用户保留相册。考虑到开辟时候及种种坑运用了canvasdrawer组件,个中开辟过程当中碰到的一些题目总结。
1.安卓部份机型图片输出不实行
- 安卓输出图片错位题目一样异步处理
- measureText注重线上版本库1.9.1+
//营业层代码
let that = this
// 保留图片到暂时的当地文件
//注重chart初始化实例不能输出图片
const ecComponent = this.selectComponent('#mychart-dom-graph');//猎取echarts组件
ecComponent.canvasToTempFilePath({
//安卓机型此处不会胜利回调
success: res => {
that.eventDraw(res.tempFilePath)
},
fail: res => console.log('失利', res)
});
//ec-canvas.js源码
canvasToTempFilePath(opt) {
if (!opt.canvasId) {
opt.canvasId = this.data.canvasId;
}
const system = wx.getSystemInfoSync().system
ctx.draw(true, () => {//此处微信api在安卓部份机型不会回调 ,相反ctx.draw(false)清空画布会实行,致使echarts已绘制画布清空,输出为空图片
wx.canvasToTempFilePath(opt, this);
});
}
//修正后
canvasToTempFilePath(opt) {
if (!opt.canvasId) {
opt.canvasId = this.data.canvasId;
}
const system = wx.getSystemInfoSync().system
if (/ios/i.test(system)) {
ctx.draw(true, () => {
wx.canvasToTempFilePath(opt, this);
});
} else {//针对安卓机型异步猎取已绘制图层
ctx.draw(true,()=>{
//断点打印照旧不会实行setTimeout(() => {wx.canvasToTempFilePath(opt, this);}, 1000);}});
ctx.draw(true);
setTimeout(() => {//耽误猎取
wx.canvasToTempFilePath(opt, this);
}, 1000);
}
},
2.onReady动态修正echarts[options]失利
onReady: function() {
let that = this;
setTimeout(() => {//异步处理echarts实例没有加载胜利的没法设置options
option.series[0].data[0].value = that.data.canvasListData
chart.setOption(option);
}, 500);
}
<!--备注-->
//提早声明变量
let chart = null;
var option = {}
3.收集图片需下载到当地,注重设置downloadFile正当域名,尤其是微信头像链接
4.相册受权拒绝后,button不会再次弹出受权弹窗,openSetting强迫翻开设置开启受权。
5.圆形头像发起切镂空图掩盖,rect,clip有bug很难完成UI结果
发起检察:微信小顺序社区的帖子。
6.cancvas要画2倍图,不然输出图片隐约
参考
末了
HTML页面能够运用 html2canvas转换节点天生图片保留
TIPS
因为时候限定,许多处所明白不够深入,瑕疵许多,迎接提出