小程序生成长图(预览,不限高度)+小程序码+小程序码中间logo换成自定义logo

2023-10-29

上条博客已经介绍了如何云调用生成小程序码,链接地址:
https://blog.csdn.net/mingjuna2010/article/details/92796711
这条博客我们来介绍小程序中怎么生成长图,如何预览,并且在长图中绘制小程序码,以及小程序码中间的默认logo换成自定义logo。
①首先在页面上 index.wxml 准备一个画布,画布的宽度设定,高度不定。由于高度不定,所以预览时画布是不显示在页面上的,只提供画图功能,显示在页面上的是image标签,外层使用swiper-view,进行长图的上下滑动预览,视觉效果加上蒙层,代码如下:

<!-- 显示在页面上的image标签,即长图 -->
<scroll-view class="temp_day_box" style='max-height:900rpx;' scroll-y wx:if="{{sharing}}">
  <view>
     <image class="canvas_img" style='height:{{height*2}}rpx' src='{{shareImgSrc}}'></image>
  </view>
</scroll-view>

<!--显示长图是背景变暗,即蒙层-->
<view class="mask" catchtap='shareStop' catchtouchmove='preventTouchMove' wx:if="{{sharing}}"></view>

<!-- 不显示在页面上的画布-->
<canvas class='canvasHigh' style="height:{{height*2}}rpx" canvas-id='share'></canvas>

②在index.js文件中的data里面定义相应的参数,代码如下:

  data: {
    height: '',         //长图的高度
    sharing:false,      //控制长图是否显示
    shareImgSrc:'',     //最终长图(包括背景图,换过中间logo的小程序码)
    shareDocuments:''   //后端获取的长图的背景图
  },
  
  // 蒙层关闭事件
  shareStop() {
     this.setData({sharing: false})
  },

③在index.wxss里面添加画布样式,此时画布是不显示在页面上的,只是提供画图的功能,所以样式中设置了画布的宽度,并且使用固定定位将其移出屏幕,代码如下:

.canvasHigh {
  position: fixed;
  left: -9999rpx;
  top: -9999rpx;
  width: 600rpx;
}
.temp_day_box {
  width: 600rpx;
  position: fixed;
  top: 100rpx;
  left: 10%;
  z-index: 999;
}
.canvas_img {
  width: 600rpx;
}

④以上三步准备工作已经就绪,接下来就详细讲述shareImgSrc怎么产生的,index.js代码如下:

// 长图+二维码显示
  drawPage() {
    let _this = this
    // 获取图片信息(宽高)
    wx.getImageInfo({
      src: this.data.shareDocuments[0].url,   //这是长图的背景图,从服务端获取,这里就不详细赘述
      success(res) {
        _this.setData({
          height: res.height,   //背景图的高度
          width: res.width       //背景图的宽度
        })
        const ctx = wx.createCanvasContext("share");      //获取上下文对象
        ctx.drawImage(res.path, 0, 0, 300, _this.data.height);       //绘制背景图
        let that = _this
        wx.getImageInfo({
          src: that.data.code,      //之前获取的小程序码
          success(res) {
            ctx.drawImage(res.path, 150, that.data.height - 150, 125, 125);   //绘制小程序码
            let index = that
            wx.getImageInfo({
              src: index.data.orgLogo,   //需要替换的logo,从服务端获取,这里就不详细赘述
              success(res) {
                console.log("绘制中间logo")
                ctx.beginPath()   //开始创建一个路径
                ctx.setStrokeStyle('rgba(0,0,0,0)')   //画笔颜色换成透明
                ctx.arc(212.5, index.data.height - 87.5, 31.25, 0, 2 * Math.PI, false)    //画一个圆形裁剪区域
                ctx.stroke();
                ctx.clip()    //裁剪
                ctx.drawImage(res.path, 181.25, index.data.height - 118.75, 62.5, 62.5);    //绘制小程序码中间logo
                //最后将所有的绘制好的图片画出来,注意如果不需要保存的长图,可以直接ctx.draw(),但是需要保存的长图,需要先调用wx.canvasToTempFilePath这个API。
                ctx.draw(true, function () {
                  wx.canvasToTempFilePath({
                    x: 0,
                    y: 0,
                    width: 300,
                    height: that.data.height,
                    destWidth: 300,
                    destHeight: that.data.height,
                    canvasId: 'share',
                    success(res) {
                      that.setData({
                        shareImgSrc: res.tempFilePath
                      })
                    }
                  })
                });
              }
            })
          }
        })
      }
    })
  },

⑤接下来讲述一下如何保存长图,这个就比较简单了,index.js代码如下:

// 保存长图
  saveLongImage(){
    let _this = this
    wx.saveImageToPhotosAlbum({
      filePath: _this.data.shareImgSrc,
      success(res) {
     wx.showToast({
      title: '保存成功',
      icon: 'success',
})
//保存长图成功之后,1.5s之后关闭蒙层和长图
     setTimeout(function () {
              _this.shareStop()
            }, 1500)
          }
        })
      },
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

小程序生成长图(预览,不限高度)+小程序码+小程序码中间logo换成自定义logo 的相关文章

随机推荐

  • 技术至简-8:调制解调到底是什么样的数学运算?---从时域和频域两个角度看调制解调的本质

    目录 1 从时域的角度看调制 原始信号与载波信号的相乘 2 从频率的角度看调制 原始信号的频谱搬移到载波信号的频谱附近 3 从时域的角度看解调 调制后信号与载波信号的相乘 4 从频率的角度看解调 把载波频谱附近的原始信号的频谱搬移到原始信号
  • 单极性非归零NRZ码、双极性非归零NRZ码、2ASK、2FSK、2PSK、2DPSK及MATLAB仿真

    这篇博客是用MATLAB仿真观察二进制数字信号码元速率和它的带宽的关系 书上给了数字基带信号和频带信号的功率谱密度 但是我还没搞明白FFT与功率谱密度的关系 所以博客里图片的信号幅值就不要纠结啦 看包络形状和带宽就行 如果有明白FFT与功率
  • k8s之Informer Store、Indexer、ThreadStore详解

    Store 在 Informer 中 Store 提供了将存储对象的能力 而 Indexer 在 Store 的基础上又提供了可以自定义索引来查询对象的功能 Store 接口提供的功能比较直观 主要是用于对对象的增删改查 包括Indexer
  • Docker 之MySQL 重启,提示Error response from daemon: driver failed programming external connectivity on **

    今天刚刚修改基于Docker服务的MySQL配置参数 准备重新加载MySQL 容器 提示如下截图的错误信息 root localhost docker restart 7d98a59a8012 Error response from dae
  • 【Vue】【01】vue环境搭建

    1 环境安装 https nodejs org zh cn 选择长期维护版 下载完成下一步下一步安装 建议选择版本低的行安装 2 cmd命令 node v npm v 3 淘宝镜像cnpm npm install g cnpm regist
  • 如何使用GPT2中文闲聊对话系统,机器人对话,自动对话!

    目录 目录结构 运行环境 首次运行 如何训练自己的模型 数据预处理 训练模型 如何确定这个 val num数值 编辑 编辑最后说明 打算做一个微博自动评论的一个模型 假象可以模拟回复粉丝 或者评论其他微博 首先下载GPT2模型代码 http
  • 运维实践

    欢迎关注 WeiyiGeek 点击 下方卡片 即可关注我哟 设为 星标 每天带你 基础入门 到 全栈实践 再到 放弃学习 涉及 网络安全运维 应用开发 物联网IOT 学习路径 个人感悟 等知识 花开堪折直须折 莫待无花空折枝 作者主页 ht
  • (已解决) org.apache.ibatis.ognl.OgnlException: source is null for getProperty(null, “staffId“)

    问题现象 今天在项目中遇到一个mybatis的报错 org apache ibatis ognl OgnlException source is null for getProperty null staffId 这是我之前从未遇到过的问题
  • 如何结合FT2232HL/CMSIS-DAP+Eclipse+OpenOCD软硬件工具使用SWD调试接口在Windows10操作系统在线调试S32K3XX(Cortex M7)

    由于我们公司自己需要开发烧录工具 本人通过google搜相关文档和看ARM公司的技术文档 终于实现了这个功能 因为涉及的内容知识点比较多 对于玩嵌入式MCU的小白来说要普及的知识 逐个介绍篇幅会比较长 本文中只介绍相应的关键知识点 篇幅有相
  • 大家好,这里是第一篇博客文章!

    大家好 我的第一篇CSDN博客与大家见面了 去年曾经在班级微信公众平台写过一篇关于MySql的安装及配置的推送 周围同学的反响还都不错 想着为今后找到一个技术分享交流的平台 也能够快速地增删改查已发布的文章 并且进行有效的沟通交流 便开通了
  • 面向对象的设计原则

    开放封闭原则 软件实体 类 模块 函数等 应该可以扩展 但是不可修改 大白话 就是面对新需求时 现有的类最好不做修改 以增加新的类的方式来完成新需求 这样方便维护和扩展 依赖倒转原则 抽象不应该依赖细节 细节应该依赖于抽象 1 高层模块不应
  • 慕课:软件测试各章节答案

    说明 1 该课程为西北工业大学的软件测试的慕课 2 绿色选项为正确答案 题目后括号中的答案为本人的作答 对的用绿色标示 错的用红色标示 与错题集类似 第一章 软件测试基础 1 软件测试目的是什么 ABC A 修正软件错误和缺陷提高软件质量
  • NUC980开源项目29-W25N01挂载YAFFS2文件系统

    上面是我的微信和QQ群 欢迎新朋友的加入 配置内核 取消ramdisk 设置Boot option set bootargs noinitrd root dev mtdblock2 rootfstype yaffs2 rootflags i
  • 互连线的阻抗不连续

    前言 保持互连通道的阻抗连续性 是信号完整性设计的一项重要内容 互连通道中如果存在阻抗不连续点 不仅会引起待传输信号本身的反射 而且可能还会放大其他方面因素的影响 例如串扰噪声耦合到邻近线 在临近线上传播 如果邻近线上存在多处不连续点 串扰
  • 亲密关系-【有效表达】-如何完善自己的表达思路?

    有效沟通三步 1 正面假设 2 区分感受和结论 3 区分请求和命令 案例 最近工作压力大 跟老公说我需要他安慰 他却觉得我作 还说最近是不是闲的 你需要安慰 老公理解的是 老公说你作 你听到的是 攻击 不想再表达 你听到这件事 想说些什么
  • 关于数据治理ChatGPT是如何回答的?

    这两天你的朋友圈是不是被火爆全网的ChatGPT霸屏了 你是不是已经迫不及待感受过ChatGPT带来的惊喜 那你知道ChatGPT是什么吗 面对掀起的一波话题热潮 好奇使然 小编去特别关注了一下最近火热的ChatGPT 看看这是何方神圣 竟
  • openvas漏洞扫描器

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 一 openvas简介 二 作用 三 安装及使用 openvas架构 在这里插入图片描述 https img blog csdnimg cn f46eba30a8a
  • jvm垃圾回收机制原理读书笔记

    可达性分析 主要是用来解决哪些对象是不可用的 可以被回收 以一系列称为GC Roots的对象为起点 若对象到GC Roots之间没有任何引用关系 则认为该对象是不可用的 可以被回收 具体可作为GC Roots的对象如下 不是全部 所有Jav
  • 基于随机森林特征工程语音用户满意度分析(数据预处理+随机森林)

    1 背景 数据分析而言 数据是显而易见的核心 但是并不是所有的数据都是有用的 存在不完整的 含噪声的和不一致的数据是现实世界大型的数据库或数据仓库的共同特点 一些比较成熟的算法对其处理的数据集合一般有一定的要求 如数据完整性好 数据的冗余性
  • 小程序生成长图(预览,不限高度)+小程序码+小程序码中间logo换成自定义logo

    上条博客已经介绍了如何云调用生成小程序码 链接地址 https blog csdn net mingjuna2010 article details 92796711 这条博客我们来介绍小程序中怎么生成长图 如何预览 并且在长图中绘制小程序