微信小程序如何使用canvas二维码保存至手机相册


Posted in Javascript onJuly 15, 2019

前言

在使用canvas绘制海报的过程中不建议使用原生来进行画图,因为默认是不支持rpx像素的,px不会做到自适应。

推荐使用插件 Painter

github地址

github.com/Kujiale-Mob (本地下载)…

配置很简单,也容易上手,无论是画矩形,还是将图片合成canvas;还是自己定义文字;都是很方便的。

附上一个简单的例子吧

微信小程序如何使用canvas二维码保存至手机相册

<painter :customStyle="customStyle" :palette="imgDraw" />
//
 const _this=this;
   wx.getSystemInfo({
    success (res) {
     _this.drawCanvas(res.windowHeight);
    }
   })
	 
drawCanvas(height) {
//这里的canvas的高是动态获取设备的高度,做到自适应
    const that = this;
   let heightVal=height*2+'rpx';
   this.imgDraw = {
    width: '750rpx',
    height: heightVal,
    background: '#fff',
    views: [
     {
      type: "rect",
      css: {
       top: '20rpx',
       left: '130rpx',
       color: '#1A1A1A',
       width: '660rpx',
       height: '220rpx',
       borderRadius: '32rpx'
      }
     },
     {
      type: 'image',
      url: './a.jpg',
      css: {
       top: '36rpx',
       left: '16rpx',
       width: '188rpx',
       height: '188rpx'
      }
     },
     {
      type: 'text',
      text: '',
      css: {
       top: '54rpx',
       left: '260rpx',
       fontSize: '48rpx',
       color: "#fff"
      }
     },
     {
      type: 'text',
      text: '文字部分',
      css: {
       top: '134rpx',
       left: '260rpx',
       fontSize: '30rpx',
       color: "#d1d1d1"
      }
     },
     {
      type: 'text',
      text: '1333333333',
      css: {
       top: '196rpx',
       left: '260rpx',
       fontSize: '26rpx',
       color: "#d1d1d1"
      }
     },
     {
      type: 'text',
      text: '李四',
      css: {
       top: '304rpx',
       left: '302rpx',
       fontSize: '24rpx',
       color: "#767676"
      }
     },
     {
      type: 'image',
      url: '/icon-localtion.png',
      css: {
       top: '275rpx',
       left: '260rpx',
       width: '26rpx',
       height: '168rpx'
      }
     },
     {
      type: 'image',
      url: '二维码.png',
      css: {
       top: '646rpx',
       left: '236rpx',
       width: '278rpx',
       height: '278rpx'
      }
     }
    ]
   }

  
   let { path: __path } = mpvue.getStorageSync('createImagePath')
   mpvue.saveImageToPhotosAlbum({
    filePath: __path,
    success(res) {
     // mpvue.showToast({
     //  title: '保存成功',
     //  icon: 'success',
     //  duration: 800,
     //  mask: true
     // });
   
    },
    fail(res) {
     // mpvue.showToast({
     //  title: '保存失败',
     //  icon: 'fail',
     //  duration: 800,
     //  mask: true
     // });
    }
   });
  },

这里涉及到画二维码, 如果你的二维码图片不是一个线上的链接的话,这时需要做一些小操作。

我的项目中二维码的图片传过来是一个流,所以用img的src默认发送get请求,就能拿到这个图片了。

所以url会直接发送get请求拿到图片。

canvas的层级

canvas的层级是最高的,底部的分享块会被遮住,这时你需要用两套方案,一个是纯展示用的,用正常的html来写,给用户看这个名片。

下载或分享的时候再y用canvas生产你想要图片,接着调用微信的保存api,将图片下载或分享。

let { path: __path } = mpvue.getStorageSync('createImagePath')
mpvue.saveImageToPhotosAlbum({
 filePath: __path,
 success(res) {
  // mpvue.showToast({
  //  title: '保存成功',
  //  icon: 'success',
  //  duration: 800,
  //  mask: true
  // });

 },
 fail(res) {
  // mpvue.showToast({
  //  title: '保存失败',
  //  icon: 'fail',
  //  duration: 800,
  //  mask: true
  // });
 }
});

此时就能顺利完成保存名片的功能了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
jquery下操作HTML控件的实现代码
Jan 12 Javascript
js封装的textarea操作方法集合(兼容很好)
Nov 16 Javascript
JavaScript模板引擎用法实例
Jul 10 Javascript
javascript中的五种基本数据类型
Aug 26 Javascript
JavaScript函数中的this四种绑定形式
Aug 15 Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
Sep 11 Javascript
AngularJS表单验证功能
Oct 19 Javascript
Vue2.0+ElementUI实现表格翻页的实例
Oct 23 Javascript
js+css实现打字效果
Jun 24 Javascript
页面点击小红心js实现代码
May 26 Javascript
Webpack按需加载打包chunk命名的方法
Sep 22 Javascript
Servlet返回的数据js解析2种方法
Dec 12 Javascript
如何给element添加一个抽屉组件的方法步骤
Jul 14 #Javascript
详解vuex的简单todolist例子
Jul 14 #Javascript
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
Jul 13 #Javascript
微信小程序解析富文本过程详解
Jul 13 #Javascript
微信小程序wx.navigateTo中events属性实现页面间通信传值,数据同步
Jul 13 #Javascript
微信小程序Echarts覆盖正常组件问题解决
Jul 13 #Javascript
微信小程序图片左右摆动效果详解
Jul 13 #Javascript
You might like
PHP5中的时间相差8小时的解决办法
2008/03/28 PHP
ThinkPHP之A方法实例讲解
2014/06/20 PHP
PHP return语句的另一个作用
2014/07/30 PHP
php实现搜索一维数组元素并删除二维数组对应元素的方法
2015/07/06 PHP
PHP操作路由器实现方法示例
2019/04/27 PHP
PHP读取文件或采集时解决中文乱码
2021/03/09 PHP
JavaScript 精粹读书笔记(1,2)
2010/02/07 Javascript
JavaScript计算字符串中每个字符出现次数的小例子
2013/07/02 Javascript
js验证整数加保留小数点的简单实例
2013/12/02 Javascript
验证控件与Button的OnClientClick事件详细解析
2013/12/04 Javascript
Node.js文件操作详解
2014/08/16 Javascript
javascript关于open.window子页面执行完成后刷新父页面的问题分析
2015/04/27 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
2015/08/07 Javascript
纯js实现动态时间显示
2020/09/07 Javascript
分享5个顶级的JavaScript Ajax组件库
2018/09/16 Javascript
layui字体图标 loading图标静止不旋转的解决方法
2019/09/23 Javascript
python实现sublime3的less编译插件示例
2014/04/27 Python
采用python实现简单QQ单用户机器人的方法
2014/07/03 Python
python下调用pytesseract识别某网站验证码的实现方法
2016/06/06 Python
python获取文件路径、文件名、后缀名的实例
2018/04/23 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
2018/04/25 Python
Python数据抓取爬虫代理防封IP方法
2018/12/23 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
2019/10/24 Python
pygame实现俄罗斯方块游戏(对战篇1)
2019/10/29 Python
浅谈Python中文件夹和python package包的区别
2020/06/01 Python
详解Anaconda 的安装教程
2020/09/23 Python
纯css3实现的鼠标悬停动画按钮
2014/12/23 HTML / CSS
澳大利亚领先的皮肤诊所:Skin Matrix(抗衰老、痤疮专家、药妆护肤)
2018/05/20 全球购物
接口可以包含哪些成员
2012/09/30 面试题
大专生自我评价
2014/01/28 职场文书
《雨点儿》教学反思
2014/04/14 职场文书
临床护理求职信
2014/04/26 职场文书
勿忘国耻9.18演讲稿(经典篇)
2014/09/14 职场文书
2015年建筑工作总结报告
2015/05/04 职场文书
党员心得体会范文2016
2016/01/23 职场文书
创业者如何撰写出一份打动投资人的商业计划书?
2019/07/02 职场文书