保姆级教学 uniapp绘制二维码海报并保存至相册,真机正常展示图片二维码

一、获取二维码

      uni.request({url: `https://api.weixin.qq.com/wxa/getwxacode?access_token=${getStorage("token")}`,responseType: "arraybuffer",method: "POST",data: {path: "/pages/index/index"},success(res) {// 转换为 Uint8Array 类型的数组const arrayBuffer = new Uint8Array(res.data)// 转换为 Base64 编码的字符串const base64 = uni.arrayBufferToBase64(arrayBuffer)// 缓存至本地state.image = base64},fail(err) {console.log(err, "err")}})

代码仅作示例

以上代码作用就是,拿到后端给的base64格式的图片,用做绘图

二、绘制画布

    const handleCanvas = () => {//初始化画布const ctx = uni.createCanvasContext('myCanvas');ctx.setFillStyle("rgba(96, 216, 254, 1)")ctx.fillRect(0, 0, uni.upx2px(750), uni.upx2px(1120))//外边框const mx = uni.upx2px(55)const my = uni.upx2px(332);const mwidth = uni.upx2px(640);const mheight = uni.upx2px(640);const mradius = uni.upx2px(32);const mColor = "#DFF3FF"_border(ctx, mx, my, mwidth, mheight, mradius, mColor)// 内边框const px = uni.upx2px(105)const py = uni.upx2px(382);const pwidth = uni.upx2px(540);const pheight = uni.upx2px(540);const pradius = uni.upx2px(32);const pColor = "#FFF"_border(ctx, px, py, pwidth, pheight, pradius, pColor)//二维码  _QRCode(ctx, state.image)// 绘制画布ctx.draw()}// 绘制边框   参数分别为  画布对象 画布x轴起点 画布y轴起点 画布宽度 画布高度 圆角边框 背景色const _border = (ctx: CanvasRenderingContext2D, x: number, y: number, width: number, height: number, radius: number, color: string) => {ctx.beginPath();ctx.moveTo(x + radius, y);ctx.lineTo(x + width - radius, y);ctx.arcTo(x + width, y, x + width, y + radius, radius);ctx.lineTo(x + width, y + height - radius);ctx.arcTo(x + width, y + height, x + width - radius, y + height, radius);ctx.lineTo(x + radius, y + height);ctx.arcTo(x, y + height, x, y + height - radius, radius);ctx.lineTo(x, y + radius);ctx.arcTo(x, y, x + radius, y, radius);ctx.closePath();ctx.fillStyle = color;ctx.fill();}const _QRCode = (ctx, data) => {// 获取文件管理器const fsm = wx.getFileSystemManager();//  将 base64 字符串转成 ArrayBuffer对象const buffer = wx.base64ToArrayBuffer(data);// 文件系统中的用户目录路径 (本地路径)const fileName = wx.env.USER_DATA_PATH + '/share_img.png';fsm.writeFileSync(fileName, buffer, 'binary'); // 写入文件, 同步方法// 以上四行代码让其在真机上正常显示,因为canvas无法读取base64格式,需要先保存在文件管理器,拿到临时路径ctx.drawImage(fileName, uni.upx2px(135), uni.upx2px(412), uni.upx2px(480), uni.upx2px(480))}

1.复杂样式尽量使用图片引入 ctx.drawImage("换成你本地图片的相对路径",...)

2.需要其他样式或者图片,自行添加,我这个应该还有个背景图的,在等UI出图

3.画布绘制的顺序需要注意下,后面覆盖的图形会把前面的图形在视觉上覆盖掉,所以二维码方法要写在最后面

三、保存至相册

    const handleSave = () => {uni.showLoading({title: '正在生成海报',mask: true})uni.canvasToTempFilePath({canvasId: 'myCanvas',success: (res) => {uni.saveImageToPhotosAlbum({filePath: res.tempFilePath,success: (res) => {uni.showToast({title: '保存成功',icon: 'none'})}})},complete(result) {uni.hideLoading()},})}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/63778.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

coco数据集转换SAM2格式

coco是一个大json汇总了所有train的标签 SAM2训练一张图对应一个json标签 import json import os from pycocotools import mask as mask_utils import numpy as np import cv2def poly2mask(points, width, height):points_array np.array(points, dtypenp.int32).reshape(-…

Vue.createApp的对象参数

目录 template 属性 data 属性 methods 属性 疑问 function 函数的两种写法 methods 属性中 this 的指向 总结 Vue 实例是通过 Vue.createApp() 创建的,该函数需要接收一个对象作为参数,该对象可添加 template、data、methods 等属性。 template …

LLM大语言模型私有化部署-OpenEuler22.03SP3上容器化部署Ollama与OpenWebUI

背景 你是不是也有私有化部署大模型的需求?如今有了 Ollama , HuggingFace , ModelScope 等开源平台,我们可以非常方便地搭建一个属于自己的大模型,如果网速给力,真是分分钟~~。简单起见,这篇文…

使用字典进行动态编程

在你的程序中,你想要执行各种计算,例如计算卫星的总数。 此外,当你进行更高级的编程时,你可能会发现你需要从文件或数据库中加载此类信息,而不是直接编码到 Python 中。 为了帮助支持这些场景,Python 使你…

Linux——rootfs根文件系统构建

根文件系统也叫做rootfs FATFS这类的文件系统属于Linux内核的一部分,属于软件代码,所以ROOTFS不等于FATFS。 Linux的根文件系统实际上是一个文件夹或者叫目录,这个目录下会有许多子目录,这些目录中存放许多Linux运行所必须的文件…

go语言的成神之路-标准库篇-os标准库

一、权限 在操作系统(OS)中,标准库的权限管理是非常重要的,它确保了不同用户和进程能够安全地访问系统资源。以下是一些常见的权限概念和说明: 1.用户权限 用户ID(UID):每个用户在…

linux 生成 nginx 的https ssl 证书详解

证书生成 1. 生成证书 会提示输入密码,输入两次相同密码即可。 openssl genrsa -des3 -out server.key 20482. 去除密码校验 如果想去除此输密码的步骤,可以执行如下命令,根据使用需求选择。 openssl rsa -in server.key -out server.ke…

LabVIEW实现MQTT通信

目录 1、MQTT通信原理 2、硬件环境部署 3、云端环境部署 4、程序架构 5、前面板设计 6、程序框图设计 7、测试验证 本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。 结合实际案例,展示如何利用LabVIEW和常用…

【OpenCV】直方图

理论 可以将直方图视为图形或曲线图,从而使您对图像的强度分布有一个整体的了解。它是在X轴上具有像素值(不总是从0到255的范围),在Y轴上具有图像中相应像素数的图。 这只是理解图像的另一种方式。通过查看图像的直方图,您可以直观地了解该…

【PlantUML系列】用例图(三)

目录 一、组成部分 二、典型案例 一、组成部分 参与者(Actors):使用关键字 actor 后跟参与者的名称。用例(Use Cases):使用关键字 usecase 后跟用例的名称和编号(可选)。系统边界…

Transformer部分知识点解释

传统Transformer 经典QKV算法 Transformer架构的优势与问题 万能模型,直接套用,代码实现简单,现成例子一大片并行的,比LSTM快,全局信息丰富,注意力机制效果好长序列中attention需要每一个点跟其他点计算(…

docker-compose 之 禅道(zentao) 社区版

docker-compose 关于 zentao 的配置片段如下所示: 镜像使用的官方镜像:https://hub.docker.com/r/easysoft/zentao zentao: image: easysoft/zentao:21.2container_name: zentaoports: - "8088:80"- "23306:3306"environment:TZ: A…

聚类及Python下实现 K-means 算法

聚类 聚类是无监督学习中的一种重要方法,旨在将数据集中相似的数据对象划分到同一个簇中,使得不同簇之间的数据对象差异尽可能大。在大数据环境下,聚类可以帮助挖掘数据中的隐藏结构和模式,应用场景十分广泛,比如在客…

LabVIEW调用Thorlabs的动态库进行开发

Thorlabs 产品在科研与生产领域中的应用广泛,当需要基于LabVIEW 进行二次开发时,可按照以下方法操作,以充分发挥设备性能并满足特定的项目需求。 创建 Kinesis LabVIEW 项目文件和文件夹 更详细的说明参见附件 在 LabVIEW 的启动界面中选择…

SQL中的通配符:使用LIKE操作符进行模式匹配

在SQL中,LIKE 操作符用于在查询中进行模式匹配。它常用于 WHERE 子句中,以便根据特定模式查找数据。与直接进行精确匹配的 操作符不同,LIKE 允许你使用通配符来对数据进行模糊查询,从而使查询更加灵活和强大。 常见的SQL通配符 …

三、Zookeeper

Zookeeper 三、Zookeeper3.1什么是zookeeper?3.2为什么需要zookeeper3.3Zookeeper基本运行流程3.4Zookeeper数据模型3.5Zookeeper主要角色3.6Zookeeper工作原理3.7Zookeeper节点数据操作流程三、Zookeeper 3.1什么是zookeeper? ZooKeeper是一个分布式的,开放源码的分布式应…

实现盘盈单自动化处理:吉客云与金蝶云星空数据对接

盘盈单103v2对接其他入库:吉客云数据集成到金蝶云星空 在企业信息化管理中,数据的高效流转和准确性至关重要。本文将分享一个实际案例,展示如何通过轻易云数据集成平台,将吉客云的数据无缝对接到金蝶云星空,实现盘盈单…

vue:构造结构,塞入数据:结构不变,数据改变

1. 引入vue 2. 创建页面容器,让vue去管理这个容器 3. 双向绑定 4. 单向绑定 5. 操作容器(数据模型)里的数据 5. 单向绑定的简写 6. v-if和v-else 6. v-if和v-show的区别: v-if要重新渲染界面,v-show只需要改一下元素属…

【qt环境配置】windows下的qt与vs工具集安装\版本对应关系

vs工具集安装通过vs的在线安装器勾选工具集即可 工具包下载路径:https://www.microsoft.com/zh-cn/download/details.aspx?id40784 配置工具集在qt中可以自动扫描到 《正确在 Windows 上配置 MSVC(2019) 作为 Qt 编译器》https://b3logfile.com/pdf/article/15922…

NoSQL大数据存储技术测试(5)MongoDB的原理和使用

单项选择题 第1题 关于 MongoDB 集群部署下面说法不正确的是() 已经不使用主从复制的模式 在实际应用场景中, Mongodb 集群结合复制集和分片机制 MongoDB 支持自动分片, 不支持手动切分 (我的答案) 每…