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. java学习笔记之IO编程—打印流和BufferedReader

    1.打印流(PrintWriter) 想要通过程序实现内容输出,其核心一定是要依靠OutputStream类,但是OutputStream类有一个最大缺点,就是这个类中的输出操作功能有限,所有的数据一 ...

  2. 为什么SSL证书要设有效期?

    1.首先是为了安全考虑,CA机构不能保证一个网站永远是合法的,因此它需要定期检查网站. 2.其次,以往CA证书都非常贵,签发证书的机构通过设置期限来收费,是一种商业途径. 3.最后,还有最重要的原因就 ...

  3. php 公众号开发

    思考: 1,优先使用php扩展库的sdk,配合微信文档. 2,公众号开发比较简单,重在业务. 公众号关联与消息分发 <?php namespace app\wap\controller; use ...

  4. canvas-文字粒子化(小程序)

    有2张画板,1张渲染文字为获取文字数组,另一张用来渲染粒子根据拿到的数组. step1:渲染文字,根据canvasGetImageData拿到rgba数组 step2:遍历rgba数组拿到粒子的坐标 ...

  5. laravel使用阿里云OSS上传图片

    需要自己注册阿里云账号并且开通oss服务,建立Bucket存储空间,此步骤不做演示 一.composer安装:使用composer在项目根目录执行以下命令 composer require johnl ...

  6. 假期学习【八】首都之窗百姓信件爬虫(完整版)2020.2.6 Python

    时间:2020.2.6 今天把昨天做到一半的首都之窗百姓信件爬取完成了. 源码如下: import requests import io from bs4 import BeautifulSoup # ...

  7. Tomcat启动命令行窗口中文乱码

    找到Tomcat安装目录conf/logging.properties文件 添加语句:java.util.logging.ConsoleHandler.encoding = GBK 重启Tomcat

  8. linux - mysql 异常:/usr/bin/which: no mysql in

    问题描述 运行:which mysql 报错:/usr/bin/which: no mysql in (/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local ...

  9. 占位 RK

    占位 RK include: RK403 RK404

  10. form表单jquery提交400错误

    今天在用jquery提交form表单的时候出现了一个奇怪的400错误,最后发现原因是因为使用了元素选择器来选择form表单,$('form'),使用这种方式导致了某些参数提交不上去,参数匹配不上于是s ...