微信小程序实现二维码海报保存分享功能
首先在写这个二维码分享海报的时候试过很多方法,比如:canvas中的这个createCanvasContext创建上下文的方法,去网上一搜就是一大堆,但其实这个方法已经被废弃了。Canvas 实例,可通过 SelectorQuery 获取。这是绘制背景图的时候用到的这个方法,下面首先看我的二维码是如何实现的。
二维码的话我是使用qrcode库来绘制的,首先需要下载一个weapp.qrcode.esm文件,然后在我需要绘制二维码页面的js中引入。
绘制二维码也可以去参考一下这位博主写的博客下载引入的文件:
微信小程序二维码快速生成库:weapp-qrcode 使用指南及问题解决方案-CSDN博客
import QRCode from '../weapp.qrcode.esm';
然后引入进去之后先写我们的wxml,绘制二维码的canvas需要设置canvas-id,这个不能相同
<!--pages/qrcode/index.wxml-->
<view><!-- 顶部导航栏样式 --><view class="top"><view class="round" bind:tap="targetHouse"><image src="http://lzh.yzwdblzs.xyz/img/houseThree.png" alt="" /></view></view><view class="big" bindlongpress="saveQrcode"><!-- 二维码 --><view style="margin-left: -700px;position: absolute;"><canvas canvas-id="myQrcode" style="width: 200px; height: 200px;background-color: azure;"></canvas></view><!-- 绘制的背景图 --><canvas type="2d" id="newQrcode" style="width: 350px;height: 700px;margin-top: 100px;"></canvas><!-- 背景图上的二维码 --><canvas canvas-id="newsQrcode" style="position: absolute;z-index: 3;"></canvas></view>
</view>
在onReady里初始化二维码,是因为在我们刚打开页面的时候二维码就已经可以绘制出来
// 初始化二维码
QRCode({width: 200,height: 200,canvasId: 'myQrcode',colorDark: '#000000',colorLight: '#ffffff',text: 'https://github.com/yingye',//二维码绘制的具体内容
})
绘制成功后将生成文件的tempFilePath具体路径(本地路径)
// 保存二维码为临时路径wx.canvasToTempFilePath({canvasId: 'myQrcode',success(res) {console.log('二维码路径:', res);const tempQrcodePath = res.tempFilePath;console.log(tempQrcodePath);wx.createSelectorQuery().select('#newQrcode').fields({node: true,size: true}).exec((res) => {textCanvas = res[0].node; // 获取 canvas 节点let textCtx = textCanvas.getContext('2d'); // 重点2/**至此,textCanvas,textCtx已经成功获取到,下面代码为绘图测试代码可根据自己需要修改**/const dpr = wx.getSystemInfoSync().pixelRatio; // 获取设备像素比console.log(dpr);textCanvas.width = res[0].width * dprtextCanvas.height = res[0].height * dprtextCtx.scale(1, 1)textCtx.fillRect(0, 0, 100, 100)textCtx.clearRect(0, 0, textCanvas.width, textCanvas.height)textCtx.beginPath();const bg = textCanvas.createImage();bg.src = 'http://lzh.yzwdblzs.xyz/img/noName.png';console.log(bg);bg.onload = () => {console.log('背景图加载成功');// 图片加载完成后,绘制背景图// 如果背景图过大,按比例缩放绘制const bgWidth = bg.width;const bgHeight = bg.height;// 计算缩放比例const scaleX = textCanvas.width / bgWidth;const scaleY = textCanvas.height / bgHeight;const scale = Math.max(scaleX, scaleY); // 选择最大的比例以适应 canvas// 计算背景图绘制的尺寸const drawWidth = bgWidth * scale;const drawHeight = bgHeight * scale;// 绘制背景图textCtx.drawImage(bg, 0, 0, drawWidth, drawHeight);// 然后再绘制二维码// 加载二维码图像const qrImage = textCanvas.createImage();qrImage.src = tempQrcodePath; // 使用临时路径qrImage.onload = () => {console.log('二维码加载成功');// 设置二维码绘制位置(居中)const qrWidth = 560; // 二维码宽度const qrHeight = 600; // 二维码高度const qrX = (textCanvas.width - qrWidth + 30) / 2; // 水平居中const qrY = (textCanvas.height - qrHeight + 750) / 2; // 垂直居中// 绘制二维码到背景图上textCtx.drawImage(qrImage, qrX, qrY, qrWidth, qrHeight);}}})},fail(err) {console.error('获取临时文件失败', err);},});
相关文章:
微信小程序实现二维码海报保存分享功能
首先在写这个二维码分享海报的时候试过很多方法,比如:canvas中的这个createCanvasContext创建上下文的方法,去网上一搜就是一大堆,但其实这个方法已经被废弃了。Canvas 实例,可通过 SelectorQuery 获取。这是绘制背景图…...

Android 搭建AIDL Client和Server端,双向通信
一、背景 使用AIDL,搭建Client和Server端,实现跨进程通讯,即两个应用之间可以相互通讯。这里列举AIDL实现的方式和需注意的细节,并附上源码。 二、实现方式 2.1 定义AIDL需要的接口,名字为xxx.aidl,Client和Server端 AIDL接口的包名和aidl文件必须一致,…...

深度学习从入门到精通——图像分割实战DeeplabV3
DeeplabV3算法 参数配置关于数据集的配置训练集参数 数据预处理模块DataSet构建模块测试一下数据集去正则化模型加载模块DeepLABV3 参数配置 关于数据集的配置 parser argparse.ArgumentParser()# Datset Optionsparser.add_argument("--data_root", typestr, defa…...

STM32-笔记5-按键点灯(中断方法)
1、复制03-流水灯项目,重命名06-按键点灯(中断法) 在\Drivers\BSP目录下创建一个文件夹exti,在该文件夹下,创建两个文件exti.c和exti.h文件,并且把这两个文件加载到项目中,打开项目工程文件 加载…...
C++ 只出现一次的数字 - 力扣(LeetCode)
点击链接即可查看题目:136. 只出现一次的数字 - 力扣(LeetCode) 一、题目 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间…...
C++设计模式:享元模式 (附文字处理系统中的字符对象案例)
什么是享元模式? 享元模式是一个非常实用的结构型设计模式,它的主要目的是节省内存,尤其在需要创建大量相似对象时。 通俗解释: 想象我们在写一本书,每个字母都需要表示出来。如果每个字母都单独用对象表示ÿ…...

android EditText密码自动填充适配
android上的密码(其实不仅仅是密码,可以是用户名也可以是邮箱)自动填充,是需要考虑适配的。 官方文档:https://developer.android.com/identity/autofill/autofill-optimize?hlzh-cn 什么是自动填充 手机厂商一般会…...
LeetCode 刷题笔记
LeetCode 刷题笔记 1. 20241218 (1)2447 std::gcd是C17引入的一个函数,用于计算两个整数的最大公因数。位于<numeric>头文件中。 #include <iostream> #include <numeric> // std::gcdint main() {int a 36;int b 60…...

【Java基础面试题034】Java泛型擦除是什么?
回答重点 泛型擦除指的是Java编译器在编译时将所有泛型信息删除的过程,以确保与Java1.4及之前的版本保持兼容 泛型参数在运行时会被替换为其上界(通常是Object),这样一来在运行时无法获取泛型的实际类型。 作用:泛型…...
使用ssh命令远程登录服务器的两种便捷方式:简化ssh命令、创建bat文件
1. 简化ssh命令 使用记事本打开该路径C:\Users\<你的用户名>\.ssh\下的config文件,粘贴以下代码: Host myserverHostName 192.168.1.1(这里换成你的ip地址)User your_username(这里换成你的用户名)Port 22保存文件后现在在cmd中直接输入ssh myserv…...
access数据库代做/mysql代做/Sql server数据库代做辅导设计服务
针对Access数据库、MySQL以及SQL Server数据库的代做和辅导设计服务,以下是一些关键信息和建议: 一、服务概述 这些服务通常包括数据库的设计、创建、优化、维护以及相关的编程和查询编写等。无论是Access这样的桌面关系数据库管理系统(RDB…...

第十七届山东省职业院校技能大赛 中职组“网络安全”赛项任务书正式赛题
第十七届山东省职业院校技能大赛 中职组“网络安全”赛项任务书-A 目录 一、竞赛阶段 二、竞赛任务书内容 (一)拓扑图 (二)模块A 基础设施设置与安全加固(200分) (三)B模块安全事件响应/网络安全数据取证/…...
Android学习(五)-Kotlin编程语言-面向对象中的 继承-构造函数-接口三模块学习
首先,我们需要定义一个 Person 类: open class Person {var name ""var age 0fun eat() {println("$name is eating.")} } 注意,Person 类前面加上了 open 关键字,表示这个类可以被继承。在 Kotlin 中&am…...
滑动窗口 + 算法复习
维护一个满足条件的窗口大小,然后进行双指针移动 1.最长子串 题目链接:1.最长子串 - 蓝桥云课 #include<bits/stdc.h> #define int long long using namespace std; string s; int k; signed main() {int max_len0,left0;cin>>s>>k;…...
贪心算法 greedy
文章目录 参考贪心算法[Leetcode455 分发饼干](https://leetcode.cn/problems/assign-cookies/description/)分析题解 [Leetcode135 分发糖果](https://leetcode.cn/problems/assign-cookies/description/)分析题解 leetcode435无重叠区间分析题解 参考 https://github.com/ch…...
基于python的家教预约网站-家教信息平台系统
标题:基于 Python 的家教预约网站-家教信息平台系统 内容:1.摘要 本文介绍了一个基于 Python 的家教预约网站-家教信息平台系统。该系统旨在为学生和家长提供一个方便、高效的家教预约平台,同时也为家教老师提供一个展示自己教学能力和经验的机会。本文详细介绍了系…...

基于深度学习多图像融合的屏幕缺陷检测方案
公司项目,已申请专利。 深度学习作为新兴技术在图像领域蓬勃发展,因其自主学习图像数据特征的性能避免了人工设计算法的繁琐,精准的检测性能、高效的检测效率以及对各种不同类型的图像任务都有比较好的泛化性能,使得深度学习技术在…...

MySQL基础笔记(三)
在此特别感谢尚硅谷-康师傅的MySQL精品教程 获取更好的阅读体验请前往我的博客主站! 如果本文对你的学习有帮助,请多多点赞、评论、收藏,你们的反馈是我更新最大的动力! 创建和管理表 1. 基础知识 1.1 一条数据存储的过程 存储数据是处理数…...

【JetPack】WorkManager笔记
WorkManager简介: WorkManager 是 Android Jetpack 库中的一个重要组件。它用于处理那些需要在后台可靠执行的任务,这些任务可以是一次性的,也可以是周期性的,甚至是需要满足特定条件才执行的任务。例如,它可以用于在后…...
docker 安装 ftp
前言 经多次测试 不知道为什么 必须添加被动模式跟端口才可以 连接成功,有知道为什么可以评论下 下载镜像 docker pull fauria/vsftpd启动ftp 服务 参考链接 docker run -d -v /etc/localtime:/etc/localtime:ro -v /home/dr/data/ftp:/home/vsftpd \ -e "…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...