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. SpringBoot之Configuration

      在SpringBoot中可以通过@Configuration对某个类注解将该类申明为配置类,以此在代替先前spring版本中配置xml中的功能,并且增加了可读性与维护性.并且在注解类中的类方法中可 ...

  2. (填坑系列) 用aio写server与client进行通信的坑

    最近闲来无事,就估摸着自己写个“服务注册中心”来玩,当然因为是个人写的,所以一般都是简洁版本. 代码地址在:https://gitee.com/zhxs_code/my-service-registe ...

  3. LaTeX绘图

    http://math.uchicago.edu/~weinan/programs/tex_diagrams/diagrams.html 给大家分享下这个,用鼠标画diagrams,然后可以一键复制l ...

  4. python之爬虫(爬取.ts文件并将其合并为.MP4文件——以及一些异常的注意事项)

    //20200115 最近在看“咱们裸熊——we bears”第一季和第三季都看完了,单单就第二季死活找不到,只有腾讯有资源,但是要vip……而且还是国语版……所以就瞄上了一个视频网站——可以在线观看 ...

  5. [shell脚本] mysql服务启动脚本

    服务启动脚本(初始化.启动.登录) #!/bin/bash export PID=/usr/local/nestdb_master/bin/mysqld export PASSWORD=123456 ...

  6. Node.js、npm和webpack的安装

    1. 前往Node.js官网下载安装程序 2. 一路点击下一步即可 3. 测试是否安装成功 4. 配置npm在安装全局模块时的路径和缓存cache的路径 因为在执行例如npm install webp ...

  7. Cannot read property 'resolve' of undefined

    可能是node下载的有问题 推荐官网:https://nodejs.org/zh-cn/

  8. Base64编码和其在图片的传输的应用

    Base64 [原文链接] 目前Base64已经成为网络上常见的传输8Bit字节代码的编码方式之一.做支付系统时,系统之间的报文交互都需要使用Base64对明文进行转码,然后再进行签名或加密,之后再进 ...

  9. linux 定时任务设置

    创建一个mysqlbak.sh文件 #!/bin/sh #文件名时间 time=`date '+%y-%m-%d %H:%M:%S'` #mysql用户 user=root #mysql密码 pass ...

  10. Gol流程控制

    条件语句 if语句 if 布尔表达式 { }else 布尔表达式{ }else{ } if语句后的{,一定要和if条件写在同一行,否则报错 else一定要在if语句}之后,不能自己另起一行 if语句变 ...