1、 wxml 页面

使用画布来站位,并给按钮添加绑定事件

<button class='btn btn-theme' bindtap='setSaveImage'>保存图片到本地</button>

<!-- 使用画布站位-->
<canvas hidden="{{canvasHidden}}" canvas-id='imageCanvas'class='imageCanvas'
style='width:{{canvasWidth}}px; height:{{canvasHeight}}px' disable-scroll='true'> </canvas>
2、 js文件绑定方法
/**
* 保存图片到本地
*/
setSaveImage:function(e){
var that = this;
wx.showLoading({
title: '图片生成中...',
})
var res = '';
//调用画图方法
that.drawImages(); }, /**
* 画图方法
*/
drawImages:function(){
let that = this;
// console.log(that.data);
that.canvasHidden = false;
//轮播图图片
// var banner_image = that.data.imgUrls[0]; //网络图片地址无法用画布截取到,故使用微信获取图片信息的接口,来设置网络图片地址
that.getImageInfo(that.data.imgUrls[0]); //二维码图片
var qrcode_image = that.data.imagePath;
//标题
var title = that.data.goodsInfo.title; let context = wx.createCanvasContext('imageCanvas', that);
context.setFillStyle('#fff');
//绘制矩形的宽高
context.fillRect(0, 0, 375, 356); //绘制轮播图
context.drawImage(that.data.banner_image_url, 0, 0, 375,180); //绘制标题
context.setFontSize(14);
context.setFillStyle("#000")
context.fillText(title, 26, 228) //绘制描述 //绘制二维码图 x y width height
context.drawImage(qrcode_image, 228, 200, 130, 130);
// context.draw();
context.draw(false,that.drawCallBack); }, /**
* 绘制画布回调函数
*/
drawCallBack:function(){
var that = this
wx.canvasToTempFilePath({
// x:0,
// y:0,
// width: that.data.canvasWidth,
// height: that.data.canvasHeight,
canvasId: 'imageCanvas',
fileType: 'jpg',
success: function (res) {
var shareImg = res.tempFilePath;
// console.log(shareImg)
wx.saveImageToPhotosAlbum({
filePath: res.tempFilePath,
success(res) {
wx.hideLoading();
wx.showToast({
title: '保存成功',
icon: 'success',
duration: 2000
});
}
}) },
fail: function (res) {
cosole.log(res, '<-fail res')
}
})
}, /**
* 设置画布宽高
*/
setCanvasSize:function(){
var that = this;
wx.getSystemInfo({
success: function (res) {
console.log(res);
var myCanvasWidth = res.windowWidth;
var myCanvasHeight = res.windowHeight;
that.setData({
canvasWidth: myCanvasWidth,
canvasHeight: myCanvasHeight
});
},
}) }, /**
* 根据url获取图片信息
*/
getImageInfo(ewmbgurl) {
if (typeof ewmbgurl === 'string') {
var that = this;
wx.getImageInfo({ // 小程序获取图片信息API
src: ewmbgurl,
success: function (res) {
that.setData({
banner_image_url: res.path
})
},
fail(err) {
console.log(err)
}
})
}
},
3、画布api的方法说明
/**
* x => x坐标
* y => y坐标
* width => 矩形宽
* height => 矩形高
*/
context.fillRect(0, 0, 375, 356); /**
* x => x坐标
* y => y坐标
*/
context.fillText(title, 26, 228) /**
* img_url => 图片地址
* x => x坐标
* y => y坐标
* width => 矩形宽
* height => 矩形高
*/
context.drawImage(qrcode_image, 228, 200, 130, 130); /**
* boolean => 是否接着上次绘制
* that.drawCallBack => 回调函数
*/
context.draw(false,that.drawCallBack);
4、注意事项
1. 图片地址如果是网络地址,可能会出现在ide中可以正常截图,但是在手机上变成空白,所以建议使用上面
获取图片信息的方法
2. 画布截图的宽高以及位置可根据自己的需求进行修改
3. 由于获取图片信息方法是异步通知,所以画布的后续操作可以放在success 里面操作
作者:萝卜不吃土豆
链接:https://www.jianshu.com/p/657785af9c07
来源:简书

Wx-小程序-使用canvas截图保存的更多相关文章

  1. wx小程序用canvas生成图片流程与注意事项

    1.需要画入canvas的 图片都需要先缓存到本地 let ps = [] ps.push(that.loadImageFun(this.statusInfo.avatar_url, "he ...

  2. 微信小程序cavas画图并保存

    需求背景: 因微信小程序暂不支持一键分享到朋友圈功能,故要生成图片并保存到手机相册就有两种情况: 1.需保存的图片为静态固定图片.这种情况图片可直接由后端返回,再调用小程序相应api直接保存到手机相册 ...

  3. 微信小程序-基于canvas画画涂鸦

    代码地址如下:http://www.demodashi.com/demo/14461.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...

  4. 小程序利用canvas 绘制图案 (生成海报, 生成有特色的头像)

    小程序利用canvas 绘制图案 (生成海报, 生成有特色的头像) 微信小程序生成特色头像,海报等是比较常见的.下面我来介绍下实现该类小程序的过程. 首先选择前端来通过 canvas 绘制.这样比较节 ...

  5. 关于微信小程序前端Canvas组件教程

    关于微信小程序前端Canvas组件教程 微信小程序Canvas接口函数 ​ 上述为微信小程序Canvas的内部接口,通过熟练使用Canvas,即可画出较为美观的前端页面.下面是使用微信小程序画图的一些 ...

  6. wx小程序获取用户位置信息

    wx小程序内置的接口只能获取用户的坐标,通过微信位置服务获取用户地址: http://lbs.qq.com/qqmap_wx_jssdk/index.html 注:需要在key的设置中打开webSer ...

  7. 微信小程序 在canvas画布上划动,页面禁止滑动

    要实现微信小程序 在canvas画布上划动,页面禁止滑动,不仅要设置disable-scroll="true",还要要给canvas绑定一个触摸事件才能生效. <canvas ...

  8. 微信小程序之canvas绘制海报分享到朋友圈

    绘制canvas内容 首先,需要写一个canvas标签,给canvas-id命名为shareBox <canvas canvas-id="shareBox"></ ...

  9. 关于微信小程序使用canvas生成图片,内容图片跨域的问题

    最近有个项目是保存为名片(图片),让用户发送给朋友或朋友圈,找了很多方案都不适用,绞尽脑汁之后还是选了使用canvas,但是用这玩意儿生成图片最大的缺点就是,如果你的内容中有图片,并且这个图片是通过外 ...

随机推荐

  1. rtp传输h264

    ---恢复内容开始--- 基本概念的理解 H.264的主要目标:1.高的视频压缩比2.良好的网络亲和性 解决方案:VCL video coding layer 视频编码层NAL network abs ...

  2. [ZJOI2008] 生日聚会 - dp

    共有\(n\)个男孩与\(m\)个女孩打算坐成一排.对于任意连续的一段,男孩与女孩的数目之差不超过 \(k\).求方案数. \(n,m \leq 150, k \leq 20\) Solution 设 ...

  3. 从ASCII到Unicode再到UTF-8的历史原由

    编码 大小 支持语言 ASCII 1个字节 英文 Unicode 2个字节(生僻字4个) 所有语言 UTF-8 1-6个字节,英文字母1个字节,汉字3个字节,生僻字4-6个字节 所有语言 具体解释: ...

  4. 'ssh-keygen' 不是内部或外部命令,也不是可运行的程序

    右键我的电脑,点击环境变量,设置系统配置里面的Path 新增一个 D:\ruanjiananzhuangdizhi\Git\usr\bin 路径就可以了

  5. [MongoDB] 使用PHP在MongoDB中搜索的实现

    条件操作符用于比较两个表达式并从mongoDB集合中获取数据.MongoDB中条件操作符有:(>) 大于 - $gt(<) 小于 - $lt(>=) 大于等于 - $gte(< ...

  6. docker在windows下和linux下网络底层的一些区别

    windows和linux下的docker运行时的网络结构是有区别的 a.windows下,默认使用Hyper-v创建一个linux虚拟机,承载docker.所以从外向内的路径为: windows - ...

  7. 图的最短路径算法-- Floyd算法

    Floyd算法求的是图的任意两点之间的最短距离 下面是Floyd算法的代码实现模板: ; ; // maxv为最大顶点数 int n, m; // n 为顶点数,m为边数 int dis[maxv][ ...

  8. [JSOI2016]最佳团体 DFS序/树形DP

    题目 洛谷 P4322 [JSOI2016]最佳团体 Description 茜茜的舞蹈团队一共有\(N\)名候选人,这些候选人从\(1\)到\(N\)编号.方便起见,茜茜的编号是\(0\)号.每个候 ...

  9. apache配置跨域请求代理

    1.配置允许跨域请求 Header always set Access-Control-Allow-Origin "*"Header always set Access-Contr ...

  10. stopPropagation() 方法

    定义和用法 不再派发事件. 终止事件在传播过程的捕获.目标处理或起泡阶段进一步传播.调用该方法后,该节点上处理该事件的处理程序将被调用,事件不再被分派到其他节点. 语法 event.stopPropa ...