本文给出了一个微信小程序实现画布合成图片功能的实例。分享给大家参考,如下:
首先获取图片信息,然后绘制要与画布合成的内容,得到合成画布。然后,使用wx.canvasToTempFilePath导出当前画布指定区域的内容,生成指定大小的图片,并返回文件路径。此时路径是微信的临时路径,浏览器无法访问,需要请求服务器使用wx.uploadFile将本地资源上传到开发者服务器
将画布组件添加到页面的wxml中,如下所示:
view class=' canvasBox ' canvasBox canvas-id=' share canvas ' style=' width :375 px;高度:300 Px '/画布/视图在js中
Picture:函数(){//生成图片让那=这个;Letp1=newpromise(函数(解析,拒绝){wx.getimaginfo ({src:图片路径,成功(RES){ resolve(RES));} }) }).然后(RES={ const CTX=wx . createcanvascontext(' share canvas '));ctx.drawImage(res.path,0,0,375,300);//绘制背景图片//CTX . setteralign(' center ')//文本居中CTX . setfillstyle(' 000000 ')//文本颜色:黑色ctx.setFontSize(20) //文本大小:22px ctx.fillText ('text content ',20,20///stroke()方法实际绘制的是moveTo()和lineTo()方法定义的路径。默认颜色为黑色CTX.draw (false,即. draw picture());//draw()的回调函数console . log(RES . path);})},绘制图片:函数(){//生成=this的图片varsettimeout(function(){ wx . canvastempfilepath({//导出当前画布指定区域的内容,生成指定大小的图片,并返回文件路径x: 0,y: 0 0,宽度: 375,高度3360 300。DestWidth: 750,//输出图片的宽度(写成宽度的两倍,生成的图片更清晰)destheight : 600,canvas id :' share canvas ',success 3360 function(RES){ console . log(RES);that . draw _ uploadFile(RES);},})},300)},draw _ uploadfile:函数(r) {//wx.uploadfile上传本地资源到开发者服务器让那=thisWx.uploadFile({ url:图片上传接口,//在线接口filepath:r.tempfilepath,name:' imgfile ',success 3360 function(RES){ console . log(RES);if(RES . statuscode==200){ RES . data=JSON . parse(RES . data);让img src=RES . data . data . src;that . setdata({ imgpaths : img src });}else{ console.log ('failed')}},})},注意:如果此方法是作为自定义组件编写的,则wx.createCanvasContext和wx.canvasToTempFilePath都需要再传递一个这个。
在自定义组件下,当前组件实例的这个用于操作组件内的画布/组件。
至于共享,得到服务器返回的图片路径后,就可以用它来写共享图片路径了
希望本文对微信小程序的开发有所帮助。