//页面数据初始化添加参数:isSignCanvassShow
//经过canvas将图片转为jpg,使图片生成白色底便于查看预览
//list为原图片数组列表,index表示当前图片下标, //imgList表示已经经过canvas转化的图片列表 trasformImgType(list,index,imgList){ this.setData({ isSignCanvasShow:true }); index=index?index:0; const that=this; let img=list[index].fileUrl; img=img.replace(/http/,'https'); tip.loading('正在打开图片'); //获取图片信息, wx.getImageInfo({ src: img, success (res) { //画入canvas const context = wx.createCanvasContext('picCanvas'); that.resetCanvas(context); context.drawImage(res.path,0, 0); context.draw(false,function(drawed){ // console.log(drawed); wx.canvasToTempFilePath({ x: 0, y: 0, width: 414, height: 300, destWidth: 414, destHeight:300, fileType: 'jpg', canvasId: 'picCanvas', success(imgRes) { tip.loaded(); imgList.push(imgRes.tempFilePath); if(index<list.length-1){ that.trasformImgType(list,index+1,imgList) return; } that.setData({ isSignCanvasShow:false }) wx.previewImage({ current: '', //图标当前下标 urls: imgList, // 须要预览的图片http连接列表 fail:function(res){ tip.alert('图片过时需刷新'); }, }) }, fail() { that.setData({ isSignCanvasShow:false }) tip.loaded(); tip.alert('图片过时需刷新'); } }) } ) } }) }, //重绘画板 resetCanvas(context){ context.rect(0, 0, this.data.screenWidth, this.data.screenHeight - 4); //画板大小 context.setFillStyle('#fff');//背景填充 context.fill() //设置填充 context.draw() //开画 },
wxml文件须要添加以下代码:
<view hidden="{{!isSignCanvasShow}}"> <canvas canvas-id="picCanvas" id='picCanvas' class="pic-canvas" ></canvas> </view>
方法解释:javascript
经过wx.previewImage预览图片时,会出现格式为png预览背景为黑色时,图片查看不清楚,能过下面的方法转化为白色底,方便查看java
一、先用wx.getImageInfo 下载图片到本地,而且获取图片的信息;canvas
二、将图片画入canvas,并生成临时图片地址;数组
三、将canvas生成的地址填写入imgList缓存起来;缓存
四、当全部图片都转化完成以后,调用wx.previewImage查看图片this
五、每次转化完一片图片的时候,就从新绘制一下canvas;url