微信小程序--给头像添加logo(生成海报同理)

2023-11-20

实现给图片添加logo或者生成海报,其原理是使用canvas,用canvas绘制出想要的图片进行保存

1.在wxml文件中添加canvas

canvs层级太高,所以将它定位到屏幕外,不影响页面

<view style='width:0px;height:0px;overflow:hidden;position: absolute;top:-1000px;'>
    <canvas canvas-id='myCanvas' style='width:500px;height:500px;'></canvas>
</view>

1.上传图片

 chooseImg(){
    wx.chooseImage({
      count:1,  
      success: (res)=>{
        if (res.errMsg == "chooseImage:ok"){
          this.setData({
            headImg: res.tempFilePaths[0]
          })
        }
      }
    })
  },

2.获取添加的logo图标

//生成头像
  creatHead(){
    //调用接口,获取添加到头像的icon图标
    // WXAPI.getIcon() 调用接口
    WXAPI.getIcon().then(res=>{
    //将网络图片转换为本地图片(res.data:图片地址)
    	this.handleNetImg(res.data).then((resImg, err)=>{
			if (err){
				 wx.showToast({
				    title: '图片获取错误',
				    icon: "none"
				  })
				  return;
			 }
			 this.setData({
				   headIcon: resImg.path
			 })
			 //绘制头像
			 this.creatCanvas();
			})
    })
    
  },
//网络图片转为本地图片
  handleNetImg(imagePath) {
    return new Promise((resolve, reject) => {
      wx.getImageInfo({
        src: imagePath,
        success: (res) => {
          resolve(res);
        },
        fail: (res) => {
          reject(res)
        }
      });
    });
  },

生成海报与给图片添加logo的不同点在于获取小程序码

	//QrCodedata 传给后端参数
	let QrCodedata = {
		scene: "fromNumber=" + this.data.FNumber,
		page: "pages/login/login",
		width: 400,
	}
	//获取小程序码(我这里获取到的是Base64)
	WXAPI.shareQRCode(QrCodedata).then(res=> {
		let imgPath = wx.env.USER_DATA_PATH + '/index' + 'qrcode' + '.png';
		let imageData = res.data.replace(/^data:image\/\w+;base64,/, "");
		let fs = wx.getFileSystemManager();
		fs.writeFileSync(imgPath, imageData, "base64");
		this.headIcon = imgPath;
	})

3.绘制canvas

// 绘制头像
  creatCanvas(){
    let _this = this;
    let ctx = wx.createCanvasContext('myCanvas', _this );
    //drawImage 的参数查找官网
    ctx.drawImage(this.data.headImg, 20, 20, 460, 460); //绘制上传的照片
    ctx.drawImage(this.data.headIcon, 345, 340, 150, 150);//绘制添加的logo图片
    ctx.draw(true, () => {
      setTimeout(() => {
        wx.canvasToTempFilePath({
          canvasId: 'myCanvas',
          success: (res) => {
          	//将绘制完成的图片赋值给变量
            this.setData({
              showImg: res.tempFilePath,
            })
          },
          fail: () => {
            wx.hideLoading();
            wx.showToast({
              title: '生成失败!',
              icon: "none"
            })
          },
        }, _this);
      }, 300);
    });
  },

4.canvas画完了,接着就是保存它

//保存图片前判断是否拥有保存到相册权限
  getPhotosAlbumAuth() {
    var _this = this;
    wx.getSetting({
      success(res) {
        if (res.authSetting['scope.writePhotosAlbum']) {
          _this.saveImg();
        } else if (res.authSetting['scope.writePhotosAlbum'] === undefined) {
          wx.authorize({
            scope: 'scope.writePhotosAlbum',
            success() {
              _this.saveImg();
            },
            fail() {
              wx.showToast({
                title: '您没有授权,无法保存到相册',
                icon: 'none'
              })
            }
          })
        } else {
          wx.openSetting({
            success(result) {
              if (result.authSetting['scope.writePhotosAlbum']) {
                _this.saveImg();
              } else {
                uni.showToast({
                  title: '您没有授权,无法保存到相册',
                  icon: 'none'
                })
              }
            }
          })
        }
      }
    })
  },
//保存头像
  saveImg() {
    var _this = this;
    wx.saveImageToPhotosAlbum({
      filePath: _this.data.showImg,
      success(data) {
        wx.showToast({
          title: "图片保存成功",
          icon: "success",
          mask: true
        })
      },

    })
  },
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微信小程序--给头像添加logo(生成海报同理) 的相关文章

  • 设计模式(不懂)

    面试中经常问到设计模式 我才对这个东西了解了一下 才发现他是没有开发的新大陆 是oo设计的更高级别 能把设计模式搞懂 那oo你就搞的差不多了 随便看了还是很有意思的 虽然不怎么懂 百科名片 相关书籍 设计模式 Design pattern
  • 在 spawn 的子进程中保持命令行颜色

    本文首发于我的博客 转载请注明出处 https kohpoll github io blo 最近在用子进程运行 gulpfile js 的时候发现终端上的颜色全部没有了 很是奇怪 经过一些研究 最终解决了问题 同时也总结了一些相关知识 希望
  • 锋利的jQuery(五)--jQuery对表单、表格的操作及更多应用

    5 1表单应用 一个表单有3个基本组成部分 1 表单标签 包含处理表单数据所用的服务器端程序URL以及数据提交到服务器的方法 2 表单域 包含文本框 密码框 隐藏域 多行文本框 复选框 单选框 下拉选择框和文件上传框等 3 表单按钮 包括提
  • 吉林大学超星MOOC学习通高级语言程序设计 C++ 实验02 分支与循环程序设计(2021级)(2)

    5 爱因斯坦阶梯 题目编号 Exp02 Basic10 GJBook3 04 15 题目名称 爱因斯坦阶梯 问题描述 设有阶梯 不知其数 但知 每步跨2阶 最后剩1阶 每步跨3阶 最后剩2阶 每步跨5阶 最后剩4阶 每步跨7阶 正好到楼顶

随机推荐

  • python文件运行路径设置,python获取程序执行文件路径的方法(推荐)

    1 获取当前执行主脚本方法 sys argv 0 和 file 1 sys argv 一个传给python脚本的指令参数列表 sys argv 0 是脚本的名字 一般得到的是相对路径 用os path abspath sys argv 0
  • Dubbo 默认线程池fixed

    SPI fixed public interface ThreadPool 线程池 param url 线程参数 return 线程池 Adaptive Constants THREADPOOL KEY Executor getExecut
  • linux共享内存面试题,linux系统工程师面试题(附答案)

    1 查看Linux系统当前单个共享内存段的最大值 命令 ipcs m ipcs a 2 用什么命令查询指定IP地址的服务器端口 题意应该是 nmap 和nbtscan 命令来扫吧 3 crontab中用什么命令定义某个程序执行的优先级别 n
  • Gurobi:使用Java+Gurobi建立一个小数学模型

    Gurobi 使用Java Gurobi建立一个小数学模型 按变量进行建模 按列进行建模 模型的求解结果 现在基本上都流行python gurobi java cplex进行建模 但是由于java相较于python还是具有显著的速度优势 于
  • 后疫情时代企业云原生成本优化指南

    在本篇文章的末为还有福利 在等着大家哦 前言 近年来 公有云 混合云等技术在全球迅速发展 云的普及度越来越高 Docker Kubernetes DevOps Service Mesh等云原生技术蓬勃发展 但在 上云 之后 企业却往往发现
  • 《数据库系统内幕》笔记 —— LSM树与OceanBase

    本文为 数据库系统内幕 第7章的笔记与心得 因为看到OceanBase底层也使用LSM树的实现作为存储引擎 因此特地记下笔记 详见OceanBase文档 https www oceanbase com docs community obse
  • Opencv学习笔记(三)线性及非线性滤波

    大纲 1 滤波综述 2 方框滤波 3 均值滤波 4 高斯滤波 5 中值滤波 6 双边滤波 一 滤波综述 图像的滤波指的是在尽量保证图像细节特征的的情况下对图像中的噪声进行抑制 又因为图像的能量大部分集中在低频或者中频的区域 图像大部分区域是
  • Scrum

    产品列表梳理会 Backlog Refinement Meeting 会议目的 Refinement 这个词是加工 提炼的意思 在scrum里 其实就是对下阶段的需求做一个讨论 澄清 细化的一个活动 希望通过这个活动 使得团队能对后续阶段的
  • 默认构造函数、拷贝构造函数、析构函数、赋值构造函数

    最近老是有人问我拷贝构造函数和赋值构造函数 说实话 我会用 但这个概念还真是搞不太清楚 真烦 概念问题少问我 学习笔记 1 析构函数 每个类只有一个析构函数 2 构造函数 每个类可以有多个构造函数 包括 默认构造函数 拷贝构造函数 赋值构造
  • Redis 7.0 核心技术、实战应用、面试题

    Redis 7 0 核心技术与实战应用 Redis 入门概述 01 Redis 是什么 Redis REmote Dictionary Server 远程字典服务器 官网介绍 https redis io docs about 官网定义 R
  • RabbitMQ消息丢失的场景,如何保证消息不丢失?(详细讲解,一文看懂)

    目录 一 RabbitMQ消息丢失的三种情况 二 RabbitMQ消息丢失解决方案 1 针对生产者 方案1 开启RabbitMQ事务 方案2 使用confirm机制 2 针对RabbitMQ 1 消息持久化 2 设置集群镜像模式 3 消息补
  • HDMI CEC协议

    1 前言 本文档仅作为本人记录使用 主要根据工作使用及 HDMI Specification 1 4a pdf 进行终结得出 若有不足会后续补充 2 CEC简介 CEC Consumer Electronics Control 是一套完整的
  • jenkins安装出现该实例似乎已离线等报错和如何卸载干净Jenkins的解决方案

    前段时间在准备使用Jenkins来实现Android自动化打包 但是在安装Jenkins的过程中出现了问题 在安装过程中出现 Jenkins实例似乎已离线 需要我配置代理 还有一个离线安装的文档 可是根据文档并没有明确说明怎么配置 然后我就
  • WPS Office 漏洞复现

    前言 此文章仅用于技术交流 严禁用于对外发起恶意攻击 一 产品简介 WPS Office是金山软件公司开发的 中国领先的办公软件套件 包含文字 表格和演示三个组件 支持创建 编辑各种文档 并具有强大的数据计算 统计和分析功能 其特点包括全面
  • Git提交代码步骤

    目录 1 Git提交代码步骤 1 1 第1步 同步远程仓库代码 git pull 1 2 第1步 查看当前状态 git status 1 3 第2步 提交代码到本地git缓存区 git add 1 4 第3步 推送代码到本地git库 git
  • 让csdn中的静态图动起(firemonkey)

    缘起 错过了登月50周年的日子 7 20 看到了如下卡通图童心大发 让它动起来 https blog csdn net csdnnews article details 96403350 代码下载 链接 https pan baidu co
  • CI/CD

    CICD 是 持续集成 Continuous Integration 持续交付和持续部署 Continuous Deployment 简称 指在开发过程中自动执行一系列从开发到部署的过程中 尽量减少人工的介入 CI CD AND CD CI
  • C++学习笔记12:输入输出流实例整理(文本文件读写,二进制文件读写,一组数据的文件读写,随机访问文件实例

    这也太难记了555老阔疼 文件读写示例 include
  • Kubernetes APIServer,Etcd,controller manager,scheduler 高可用原理

    高可用背后的原理 这两个月和博云合作的项目是要用于客户生产环境的 这个和我以前做的东西有很大的不同 所有基础架构必须给出高可用的解决方案 在这之前我只做过一些流量较小的用户产品或者一些原型项目 一开始基础架构都只给出了单节点的解决方案 结果
  • 微信小程序--给头像添加logo(生成海报同理)

    实现给图片添加logo或者生成海报 其原理是使用canvas 用canvas绘制出想要的图片进行保存 1 在wxml文件中添加canvas canvs层级太高 所以将它定位到屏幕外 不影响页面