首先,在小程序里进行绘图操作需要用到
这样一来我们就有了一个600x900的绘图区域。然后,我们要开始写JS代码在这张画布上进行绘图操作。
步骤1:绘制背景图
那么我们就先找一张图片来当做背景图,将它画到画布上去,代码大致如下:
constwxGetImageInfo=promisify(wx.getImageInfo)
wxGetImageInfo({
}).then(res=>{
ctx.drawImage(res.path,0,0,600,900)
ctx.draw()
})
在这段代码中,我们通过使用wx.getImageInfo这个API来下载一个网络图片到本地(并可获取该图片的尺寸等其他信息),然后调用ctx.drawImage方法将图片绘制到画布上,填满画布。
步骤2:绘制文字
我们尝试下在画布上添加一段居中显示的文字:“作者:一斤代码”,还是基于前面的那段代码接着写:
//底图
//作者名称
ctx.setFontSize(22)//文字字号:22px
ctx.fillText(“作者:一斤代码”,600/2,500)
ctx.stroke()
由于在canvas上绘制文字不会自动折行,如果要画一段比较长的文本,可以考虑限制一行的字数,将长文本拆分成几行来画。
步骤3:绘制小程序码
Promise.all([
}),
]).then(res=>{
ctx.drawImage(res[0].path,0,0,600,900)
//小程序码
constqrImgSize=180
ctx.drawImage(res[1].path,(600-qrImgSize)/2,530,qrImgSize,qrImgSize)
保存到系统相册
接着,我们要把它保存进用户的系统相册中去,实现这个功能,我们主要靠wx.canvasToTempFilePath和wx.saveImageToPhotosAlbum这两个API。
主要的流程就是先通过wx.canvasToTempFilePath将
constwxCanvasToTempFilePath=promisify(wx.canvasToTempFilePath)
constwxSaveImageToPhotosAlbum=promisify(wx.saveImageToPhotosAlbum)
wxCanvasToTempFilePath({
},this).then(res=>{
returnwxSaveImageToPhotosAlbum({
filePath:res.tempFilePath
wx.showToast({
其中promise.util.js如下:
[javascript]viewplaincopy
/**
*将wx的callback形式的API转换成支持Promise的形式
*/
module.exports={
promisify:api=>{
return(options,...params)=>{
returnnewPromise((resolve,reject)=>{
constextras={
success:resolve,
fail:reject
}
api({...options,...extras},...params)
KESION科汛软件
KESION不断通过技术创新,提供产品和服务,助力企业向数字化转型,通过科技驱动商业革新,让商业变得更智慧!
科汛专注于在线教育软件及私域社交电商SaaS平台解决方案,让商业经营更简单。