微信小程序如何使用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 相关文章推荐
Extjs学习笔记之一 初识Extjs之MessageBox
Jan 07 Javascript
web开发人员学习jQuery的6大理由及jQuery的优势介绍
Jan 03 Javascript
jquery中load方法的用法及注意事项说明
Feb 22 Javascript
js中substring和substr的定义和用法
May 05 Javascript
使用node.js半年来总结的 10 条经验
Aug 18 Javascript
JS+DIV+CSS排版布局实现美观的选项卡效果
Oct 10 Javascript
浅析AngularJs HTTP响应拦截器
Dec 28 Javascript
AngularJS中transclude用法详解
Nov 03 Javascript
jquery.Callbacks的实现详解
Nov 30 Javascript
jQuery 实现双击编辑表格功能
Jun 19 jQuery
原生js实现省市区三级联动代码分享
Feb 12 Javascript
vue中实现点击空白区域关闭弹窗的两种方法
Dec 30 Vue.js
如何给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
PHP Session变量不能传送到下一页的解决方法
2009/11/27 PHP
PHP中替换键名的简易方法示例详解
2014/01/07 PHP
php文件扩展名判断及获取文件扩展名的N种方法
2015/09/12 PHP
浅析php-fpm静态和动态执行方式的比较
2016/11/09 PHP
JS父页面与子页面相互传值方法
2014/03/05 Javascript
jquery解析xml字符串示例分享
2014/03/25 Javascript
js检验密码强度(低中高)附图
2014/06/05 Javascript
javascript实现获取服务器时间
2015/05/19 Javascript
jQuery焦点图轮播插件KinSlideshow用法分析
2016/06/08 Javascript
简单理解vue中实例属性vm.$els
2016/12/01 Javascript
JavaScript实现构造json数组的方法分析
2018/08/17 Javascript
javascript和php使用ajax通信传递JSON的实例
2018/08/21 Javascript
vue项目中全局引入1个.scss文件的问题解决
2019/08/01 Javascript
Vue组件跨层级获取组件操作
2020/07/27 Javascript
Webpack的Loader和Plugin的区别
2020/11/09 Javascript
[54:10]完美世界DOTA2联赛PWL S2 Magma vs FTD 第二场 11.29
2020/12/03 DOTA
python 全文检索引擎详解
2017/04/25 Python
python下载文件记录黑名单的实现代码
2017/10/24 Python
Python封装原理与实现方法详解
2018/08/28 Python
django使用JWT保存用户登录信息
2020/04/22 Python
python中Ansible模块的Playbook的具体使用
2020/05/28 Python
Python定义一个函数的方法
2020/06/15 Python
Python 如何在字符串中插入变量
2020/08/01 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
CSS3实现渐变背景兼容问题
2020/05/06 HTML / CSS
HTML5进度条特效
2014/12/18 HTML / CSS
高清屏下canvas重置尺寸引发的问题的解决
2019/10/14 HTML / CSS
美国一站式电动和手动工具商店:International Tool
2020/11/26 全球购物
什么是lambda函数
2013/09/17 面试题
在职人员函授期间自我评价分享
2013/11/08 职场文书
副董事长岗位职责
2014/04/02 职场文书
音乐之声音乐广播稿
2014/09/10 职场文书
小学教师师德师风承诺书
2015/04/28 职场文书
入党自传范文2015
2015/06/26 职场文书
毕业生入职感言
2015/07/31 职场文书
2016年大学光棍节活动总结
2016/04/05 职场文书