1.前言
前几天刚好有这么一个需求,保存一个图文结合的图文的宣传图到手机本地,然后就选择使用canvas画布来实现这个需求。微信小程序这个canvas坑还是有点多。
需求
//图片
将这个设计稿用canvas绘制出来
2.开始实现功能
2.1 wxml
<view class="container">
<canvas canvas-id="shareCanvas" class='canvas-style'>
</canvas>
<view class="linkcopy">
<text>分享链接</text>
<text bindtap="uploads">保存图片</text>
</view>
</view>
2.2 js
定义一个函数用来初始化实例
drawing: function () {
//定义全局canvas
const ctx = wx.createCanvasContext('shareCanvas');
//绘制背景色
ctx.setFillStyle('#FAFAFA')
ctx.fillRect(0, 0, 312, 455)
//背景图
var shearbg = wx.getStorageSync('shearbg');
ctx.drawImage(shearbg, 0, 0, 312, 166)
// 标题
ctx.setFillStyle('#333333')
ctx.font = 'normal bold 15px sans-serif'
ctx.fillText('绿地新都会', 25, 190)
// 二维码
var qrcode = wx.getStorageSync('qrcode');
ctx.drawImage(qrcode, 93.75, 290, 124.5, 111)
// 填充一个白色矩形
ctx.setFillStyle('white')
ctx.setShadow(0, 5, 16, 'rgba(185,185,185,0.5)');// 设置阴影
ctx.fillRect(17, 140, 280, 300)
ctx.draw(); //实例化完成
wx.hideLoading() // 弹窗消失
}
这里大概写一下 没有写完 ,因为绘制类容比较多,所以只举例绘制图片文字view 还有阴影之类的
// 下载二维码并存入缓存
var that = this;
wx.getImageInfo({
src: "https://yun.fangsale.com/public/miniPicture/images/framework/pic2.png",
success: function (res) {
wx.setStorageSync('qrcode', res.path);
}
})
这里主要是下载线上图片,因为线下图片包过大不能上传,线上不能用来直接绘制,所以的下载到本地
2.3 保存canvas
uploads: function () {
var that = this;
var timer = setTimeout(function(){
wx.canvasToTempFilePath({
x: 0,
y: 0,
width: 312,
height: 455,
destWidth: 936,
destHeight: 1365,
canvasId: 'shareCanvas',
success(res) {
wx.saveImageToPhotosAlbum({
filePath: res.tempFilePath,
success: function (data) {
wx.showToast({
title: '保存成功,快去分享吧',
icon: 'none',
duration: 2000
})
clearTimeout(timer)
},
fail: function (error) {
console.log(error)
wx.showToast({
title: '很遗憾,保存失败',
icon: 'none',
duration: 2000
})
clearTimeout(timer)
}
})
}
})
},1000)
}
3.基本就是这么多啦。

成功。

本文介绍了如何在微信小程序中利用canvas画布实现图文结合的宣传图保存到手机本地的需求。详细讨论了wxml和js的实现方式,包括图片下载和阴影效果的绘制,并提供了保存canvas的基本步骤。
2万+

被折叠的 条评论
为什么被折叠?



