当前位置: 首页 > news >正文

在uni-app中使用Painter生成小程序海报

在uni-app中使用Painter生成小程序海报

  1. 安装Painter
    从GitHub下载Painter组件:https://github.com/Kujiale-Mobile/Painter
    将painter文件夹复制到uni-app项目的components目录下

  2. 配置页面
    在需要使用海报的页面的pages.json中配置

{"path": "pages/share/index","style": {"navigationBarTitleText": "分享海报","usingComponents": {"painter": "/components/painter/painter"}}
}
  1. 在页面中使用Painter
<template><!-- 海报详情 --><view class="wrap"><!-- 引入 Painter 组件,隐藏绘制层 --><painter :palette="posterData" @imgOK="onImgOK" @imgErr="onImgErr"style="position: absolute; left: -9999rpx;" /><!-- 显示生成的海报 --><image v-if="imagePath" :src="imagePath" show-menu-by-longpressmode="aspectFill" style="width: 90%; height: 1200rpx;margin-left: 5%;" /></view>
</template><script>import {getPosterConfigDetail,saveAgentPoster} from '@/api/home.js'export default {data() {return {userName: "", // 动态用户名称phoneNumber: "", // 动态电话号码qrcodeBase64: "", // 从接口获取的 Base64 小程序码posterData: {}, // Painter 配置数据imagePath: "", // 生成的海报路径posterImageUrl: "", //海报背景图oldUserName: "",//上次绘制海报时的用户名oldPhoneNumber: "",posterName: '',mainImageId: '',posterCode: '',templateId: ''}},onLoad(option) {// id为海报模板this.id = option.idthis.init()},methods: {init() {// 后台使用初始信息生成微信小程序码const posterConfigDetail = await getPosterConfigDetail({id: this.id})this.userName = res.data.userNamethis.phoneNumber = res.data.mobilethis.posterCode = res.data.posterCodethis.templateId = res.data.idthis.posterImageUrl = res.data.posterImageUrlthis.posterName = res.data.posterNamethis.qrcodeBase64 = res.data.wxCodeContentthis.oldUserName = this.userNamethis.oldPhoneNumber = this.phoneNumberthis.generatePoster()},// 生成海报配置async generatePoster() {const posterConfig = {width: "750rpx",height: "1334rpx",background: "#ffffff",views: [// 背景图{type: 'image',url: `${this.posterImageUrl}`,css: {width: '750rpx',height: '1334rpx'}},{type: "text",text: `联系人:${this.userName}`, // 直接注入数据css: {fontSize: "32rpx",bottom: "250rpx",left: "250rpx"}},{type: "text",text: `手机号:${this.phoneNumber}`,css: {fontSize: "28rpx",bottom: "200rpx",left: "250rpx"}},{type: "image",url: `data:image/png;base64,${this.qrcodeBase64}`,css: {width: "200rpx",height: "200rpx",bottom: "350rpx",left: "275rpx"}}]};this.posterData = posterConfig;console.log(this.posterData, ' this.posterData')// 手动触发绘制this.$forceUpdate()},// 生成海报成功onImgOK(e) {this.imagePath = e.detail.path;}
</script>            
  1. 预览、保存图片到相册
<template><!-- 海报详情 --><view class="wrap"><!-- 引入 Painter 组件,隐藏绘制层 --><painter :palette="posterData" @imgOK="onImgOK" @imgErr="onImgErr"style="position: absolute; left: -9999rpx;" /><!-- 显示生成的海报 --><h1 style="text-align: center;font-size: 40rpx;margin: 20rpx 0;color:#3ccc97;">{{posterName}}</h1><image v-if="imagePath" :src="imagePath" show-menu-by-longpressmode="aspectFill" style="width: 90%; height: 1200rpx;margin-left: 5%;" /><view class="uni-form"><view class="uni-form-item uni-column"><view class="title">联系人: </view><input class="uni-input" placeholder="请输入联系人" v-model="userName"></input></view><view class="uni-form-item uni-column"><view class="title">手机号码: </view><input class="uni-input" type="number" maxlength="11" v-model="phoneNumber"placeholder="请输入手机号码"></input></view><view class="uni-form-item uni-column"><view class="title">海报标题: </view><input class="uni-input" v-model="posterName" placeholder="请输入海报标题"></input></view></view><!-- 触发生成的按钮 --><view class="" style="padding-bottom: 60rpx;overflow: hidden;width: 100%"><button class="btnStyle" @click="previewImg">预览</button><button class="btnStyle" @click="generateShare">生成并分享</button><button class="btnStyle" @click="saveToAlbum">保存到相册</button></view></view>
</template><script>import {getPosterConfigDetail,saveAgentPoster} from '@/api/home.js'export default {data() {return {userName: "", // 动态用户名称phoneNumber: "", // 动态电话号码qrcodeBase64: "", // 从接口获取的 Base64 小程序码posterData: {}, // Painter 配置数据imagePath: "", // 生成的海报路径posterImageUrl: "", //海报背景图oldUserName: "",//上次绘制海报时的用户名oldPhoneNumber: "",posterName: '',mainImageId: '',posterCode: '',templateId: ''}},onLoad(option) {this.token = uni.getStorageSync('token')// id为海报模板this.id = option.idthis.init()},created() {},methods: {init() {// 后台使用初始信息生成微信小程序码const posterConfigDetail = await getPosterConfigDetail({id: this.id})this.userName = res.data.userNamethis.phoneNumber = res.data.mobilethis.posterCode = res.data.posterCodethis.templateId = res.data.idthis.posterImageUrl = res.data.posterImageUrlthis.posterName = res.data.posterNamethis.qrcodeBase64 = res.data.wxCodeContentthis.oldUserName = this.userNamethis.oldPhoneNumber = this.phoneNumberthis.generatePoster()},asnyc previewImg() {const needStatus = await this.needRegenerate()if (needStatus) {await this.generatePoster()// 延迟0.5秒,等待页面重绘await this.delay(500)}wx.previewImage({current: this.imagePath,urls: [this.imagePath]})},// 修改用户信息后,重新生成小程序码及海报编码(生成并分享和保存到相册会上传数据到后台,可能会存储多条数据,以海报编码做区分)async needRegenerate() {// 修改用户信息后,重新生成小程序码if (this.userName != this.oldUserName || this.phoneNumber != this.oldPhoneNumber) {let that = thisawait new Promise((resolve, reject) => {getPosterConfigDetail({id: this.id}).then(res => {if (res.code == 0) {that.posterCode = res.data.posterCodethat.qrcodeBase64 = res.data.wxCodeContentthat.oldUserName = that.userNamethat.oldPhoneNumber = that.phoneNumber}resolve()}).catch(e => {reject(e)})});return true}return false}// 生成海报配置async generatePoster() {const posterConfig = {width: "750rpx",height: "1334rpx",background: "#ffffff",views: [// 背景图{type: 'image',url: `${this.posterImageUrl}`,css: {width: '750rpx',height: '1334rpx'}},{type: "text",text: `联系人:${this.userName}`, // 直接注入数据css: {fontSize: "32rpx",bottom: "250rpx",left: "250rpx"}},{type: "text",text: `手机号:${this.phoneNumber}`,css: {fontSize: "28rpx",bottom: "200rpx",left: "250rpx"}},{type: "image",url: `data:image/png;base64,${this.qrcodeBase64}`,css: {width: "200rpx",height: "200rpx",bottom: "350rpx",left: "275rpx"}}]};this.posterData = posterConfig;console.log(this.posterData, ' this.posterData')// 手动触发绘制this.$forceUpdate()},// 生成海报成功onImgOK(e) {this.imagePath = e.detail.path;},async delay(ms) {return new Promise(resolve => setTimeout(resolve, ms));},// 生成并分享async generateShare() {const needStatus = await this.needRegenerate()if (needStatus) {await this.generatePoster()// 延迟0.5秒,等待页面重绘await this.delay(500)}// 保存海报数据this.save()const that = thiswx.showShareImageMenu({path: that.imagePath, //图片地址必须为本地路径或者临时路径success: (re) => {console.log(re, "分享成功")},fail: (re) => {console.log(re, "分享失败")}});},// 保存到相册saveToAlbum() {const needStatus = await this.needReGenerate()if (needStatus) {await this.generatePoster()// 延迟0.5秒,等待页面重绘await this.delay(500)}// 保存海报数据this.save()const that = thisuni.saveImageToPhotosAlbum({filePath: that.imagePath,success: () => {uni.showToast({title: '保存成功',icon: 'success'});},fail: (err) => {console.error('保存失败:', err);if (err.errMsg.includes('auth')) {that.showAuthSetting('需要相册权限才能保存图片');} else {uni.showToast({title: '保存失败',icon: 'none'});}}});},// 显示权限设置引导showAuthSetting(content) {uni.showModal({title: '权限申请',content: content || '需要您授权权限才能继续操作',confirmText: '去设置',success: (res) => {if (res.confirm) {uni.openSetting();}}});},// 保存到后台sync save() {saveAgentPoster({mainImageId: this.mainImageId,posterCode: this.posterCode,posterName: this.posterName,templateId: this.templateId,}).then(res => {if (res.code == 0) {console.log("请求成功")}})},onImgErr(e) {console.log(e, '生成海报出错了')}}}
</script><style scoped lang="scss">.wrap {width: 100vw;height: 100%;background-color: #f7f7f7;// position: relative;}.uni-form {background-color: #f7f7f7;width: 96%;margin-left: 2%;.uni-form-item {margin-top: 20rpx;background-color: #fff;.uni-input {color: #333;font-size: 30rpx;height: 81rpx;padding-left: 10rpx;// border: none;border-radius: 10rpx;}.title {font-size: 30rpx;color: #333;// font-weight: 600;line-height: 81rpx;margin-bottom: 20rpx;float: left;width: 150rpx;text-align: right;padding-left: 5rpx;}.u-button--square {color: #3ccc97 !important;}.u-input__content__field-wrapper__field {text-align: left !important;}}}.btnStyle {width: 28%;float: left;border-radius: 20rpx;height: 80rpx;line-height: 80rpx;margin-left: 4%;}
</style>

相关文章:

在uni-app中使用Painter生成小程序海报

在uni-app中使用Painter生成小程序海报 安装Painter 从GitHub下载Painter组件&#xff1a;https://github.com/Kujiale-Mobile/Painter 将painter文件夹复制到uni-app项目的components目录下 配置页面 在需要使用海报的页面的pages.json中配置 {"path": "pag…...

Uni-app网络请求AES加密解密实现

Uni-app 网络请求封装与 AES 加密解密实现 下面我将为你提供一个完整的 Uni-app 网络请求封装方案&#xff0c;包含 POST 请求的统一处理、请求参数和响应数据的 AES 加密解密。 1. 创建加密解密工具类 首先创建一个 crypto.js 文件用于处理 AES 加密解密&#xff1a; // u…...

uniapp实现统一添加后端请求Header方法

uniapp把请求写完了&#xff0c;发现需要给接口请求添加头部&#xff0c;每个接口去添加又很麻烦&#xff0c;uniapp可以统一添加&#xff0c;并且还能给某些接口设置不添加头部。 一般用于添加token登录验证信息。 在 main.js 文件中配置。 代码如下&#xff1a; // 在…...

uniapp打包apk如何实现版本更新

我们做的比较简单&#xff0c;在后端设置版本号&#xff0c;并在uniapp的config.js中定义版本号&#xff0c;每次跟后端的进行对比&#xff0c;不一致的话就更新。 一、下载apk 主要代码&#xff08;下载安装包&#xff0c;并进行安装&#xff0c;一般得手动同意安装&#xf…...

【Java开发日记】OpenFeign 的 9 个坑

目录 坑一&#xff1a;用对Http Client 1.1 feign中http client 1.2 ribbon中的Http Client 坑二&#xff1a;全局超时时间 坑三&#xff1a;单服务设置超时时间 坑四&#xff1a;熔断超时时间 4.1 使用feign超时 4.2 使用ribbon超时 4.3 使用自定义Options 坑五&…...

RocketMQ 存储核心:深入解析 CommitLog 设计原理

一、引言 在分布式消息队列系统中&#xff0c;消息存储的可靠性和高吞吐能力是衡量系统优劣的核心指标。Apache RocketMQ 作为一款高性能、高可用的分布式消息中间件&#xff0c;其独特的 CommitLog 存储机制在消息持久化过程中扮演了关键角色。本文将深入剖析 CommitLog 的设…...

【C++ Qt】快速上手 显⽰类控件(Label、LCDNumber、ProcessBar、CalendarWidget)

每日激励&#xff1a;“不设限和自我肯定的心态&#xff1a;I can do all things。 — Stephen Curry” 绪论​&#xff1a; 本文围绕Qt中常用的显示类控件展开&#xff0c;重点讲解了 QLabel&#xff08;文本/图片显示&#xff09;、QLCDNumber&#xff08;数字显示&#xff0…...

Docker和K8s面试题

1.Docker底层依托于linux怎么实现资源隔离的&#xff1f; 基于Namespace的视图隔离&#xff1a;Docker利用Linux命名空间&#xff08;Namespace&#xff09;来实现不同容器之间的隔离。每个容器都运行在自己的一组命名空间中、包括PID&#xff08;进程&#xff09;、网络、挂载…...

shell--数组、正则表达式RE

1.数组 1.1定义 什么是数组? 数组也是一种变量,常规变量只能保存一个值,数组可以保存多个值 1.2 分类 普通数组:只能用整数作为数组的索引--0 下标 有序数组(普通数组):(index)索引(为整数,从0开始) 关联数组:可以使用字符串作为数组的索引 1.3 普通数组 引用: ec…...

java 使用 POI 为 word 文档自动生成书签

poi 版本&#xff1a;4.1.0 <properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><…...

redis+lua+固定窗口实现分布式限流

用key的过期时间替代固定窗口的时间戳 -- KEYS[1]: 限流的key -- ARGV[1]: 限流窗口大小&#xff08;秒&#xff09; -- ARGV[2]: 限流阈值local key KEYS[1] local window tonumber(ARGV[1]) local limit tonumber(ARGV[2])-- 尝试获取当前计数 local current redis.call…...

什么是SQL92标准,有什么特点和影响?

一、SQL92简介 SQL92标准是1992年由美国国家标准协会&#xff08;ANSI&#xff09;和国际标准化组织&#xff08;ISO&#xff09;联合制定的数据库语言标准&#xff0c;正式名称为"SQL&#xff1a;1992"或ISO/IEC 9075:1992。他是关系型数据库管理系统&#xff08;R…...

Flink Checkpoint 与实时任务高可用保障机制实战

在实时数仓体系中,数据一致性和任务稳定性是核心保障。本文围绕 Flink Checkpoint 机制,深入讲解高可用保障的最佳实践和工程实现。 一、业务背景与痛点 在金融风控、营销实时推荐、智能监控等场景中,实时数仓的每一条数据都至关重要。常见的业务痛点包括: 断点恢复困难:…...

WebRtc08:WebRtc信令服务器实现

如何使用socket.io发送消息 发送消息 // 给本次连接发送消息 socket.emit()// 给某个房间内所有人发送消息 io.in(room).emit()// 除了自己以外&#xff0c;给某个房间的所有人发消息 socket.to(room).emit();// 除本连接外&#xff0c;给所有人发消息 socket.broadcast.emit…...

基于 SpringBoot 与 Redis 的缓存预热案例

文章目录 “缓存预热” 是什么&#xff1f;项目环境搭建创建数据访问层预热数据到 Redis 中创建缓存服务类测试缓存预热 “缓存预热” 是什么&#xff1f; 缓存预热是一种优化策略&#xff0c;在系统启动或者流量高峰来临之前&#xff0c;将一些经常访问的数据提前加载到缓存中…...

Python对比两张CAD图并标记差异的解决方案

以下是使用Python对比两张CAD图并标记差异的解决方案&#xff0c;结合图像处理和CAD结构分析&#xff1a; 一、环境准备与库选择 图像处理库&#xff1a;使用OpenCV进行图像差异检测、颜色空间转换和轮廓分析。CAD解析库&#xff1a;若为DXF格式&#xff0c;使用ezdxf解析实体…...

LINUX427 冒险位 粘滞位 chmod 权限

为什么不同用户能查看的文件夹不同 思索 是因为不同文件夹的权限不同吗&#xff1f;感觉不是 权限不就是只有rwx权限吗&#xff1f; o 对对对 和0GU有关 O 组内的其他用户应该 O是其他用户 不是组内用户 文件创建应该设置了r权限 但是root为什么看到的好像不一样 root 这些…...

10 DPSK原始对话记录

10 DPSK原始对话记录 前言 编程之余,在 Vscode 的 Cline 插件界面中和 ai (dpsk v3-0324) 聊起了天,得到了一个有意思的回答。就像ai有自我意识一样。在此记录。 实际对话内容 时间范围:2025-04-27 23:37:22 - 23:44:17 对话模式:PLAN MODE [23:37:22] 用户提问 “你…...

实现一个瀑布流布局

1、纯CSS实现 实现方式&#xff1a;借助column-count属性来创建 4 列的布局&#xff0c;并使用 column-gap 设置列间距。每个 .img-container 使用 break-inside: avoid 来防止图片被分割。 来看一下完整的代码&#xff1a; <!DOCTYPE html> <html lang"en&qu…...

Linux:进程间通信->共享内存

1. 共享内存的概念 System V共享内存&#xff0c;是一个高效的进程间通信IPC机制&#xff0c;允许多个进程共享同一块物理内存区实现快速的数据交换。如下图所示 这两个进程分别通过页表映射到这一块共享内存中 2. 共享内存的函数 shmget 功能&#xff1a; 创建新的共享内存…...

《Crawl4AI 爬虫工具部署配置全攻略》

《Crawl4AI 爬虫工具部署配置全攻略》 摘要 &#xff1a;在数据驱动的智能时代&#xff0c;高效爬虫工具是获取信息的关键。本文将为你详细解析 Crawl4AI 的安装配置全流程&#xff0c;从基础设置到进阶优化&#xff0c;再到生产环境部署&#xff0c;结合实用技巧与常见问题解…...

spring框架学习(下)

这章节讲的主要是spring在生产Bean对象时的过程 Spring实例化对象的基本流程 1、解析bean.xml 2、封装成BeanDifinition类 3、存放到BeanDIfinitionMap里 4、从BeanDIfinitionMap遍历得到bean 5、将bean存放到SingletonObjects 6、调用getBean方法得到bean 以下是简易的…...

进程与线程-----C语言经典题目(8)

一.什么是进程 定义&#xff1a; 进程指的是程序在操作系统内的一次执行过程。它不只是程序代码&#xff0c;还涵盖了程序运行时的各类资源与状态信息。包括创建、调度、消亡。 进程的状态&#xff08;ps -aux&#xff09;&#xff1a; 就绪状态&#xff1a;进程已经…...

lstm用电量预测+网页可视化大屏

视频教学: 训练结果: 详细代码: import pandas as pd import numpy as np from sklearn.preprocessing import MinMaxScaler from sklearn.model_selection import train_test_split from tensorflow.keras.models import Sequential from tensorflow.keras.layers impo…...

linux blueZ 第六篇:嵌入式与工业级应用案例——在 Raspberry Pi、Yocto 与 Buildroot 上裁剪 BlueZ 并落地实战

本篇面向嵌入式与工业级应用场景,深入讲解如何在各类 Linux 构建系统(Raspberry Pi OS、Yocto、Buildroot)中裁剪、交叉编译与集成 BlueZ,以及在工业网关、资产追踪与蓝牙 Mesh 等典型方案中的落地实例与注意要点,帮助你打造稳定、可维护、低功耗的嵌入式蓝牙产品。 目录 …...

Dev控件RadioGroup 如何设置一排有N个显示或分为几行

1.5个选项 全部横排显示&#xff0c;则Columns 5 2.5个选项 每行分两个&#xff0c;则有三行&#xff0c;则Columns 2...

AOSP Android14 Launcher3——Launcher的状态介绍LauncherState类

Launcher3中有一个跟Launcher状态相关的类&#xff0c;叫LauncherState LauncherState 是 Launcher3 中定义各种用户界面状态的抽象基类。你可以把它想象成一个状态机&#xff0c;定义了 Launcher 可能处于的不同视觉和交互模式&#xff0c;例如主屏幕、所有应用列表、最近任务…...

Redis 笔记(三)-Redis 基本知识及五大数据类型

一、redis 基本知识 redis 默认有 16个 数据库&#xff0c;config get databases 查看数据库数量 127.0.0.1:6379> config get databases # 查看数据库数量 1) "databases" 2) "16"默认使用的是第 0个 16 个数据库为&#xff1a;DB 0 ~ DB 15&am…...

Linux——线程(2)线程互斥(锁)

知识回顾 在学习本篇内容前&#xff0c;我们需要先回顾一下几个概念。 临界资源&#xff1a;多线程执行流共享的资源就叫做临界资源 临界区&#xff1a;每个线程内部&#xff0c;访问临界资源的代码&#xff0c;就叫做临界区 互斥&#xff1a;任何时刻&#xff0c;互斥保证有…...

深度解析:具身AI机器人领域最全资源指南(含人形机器人,多足机器人,灵巧手等精选资源)

&#x1f4a1; 你是否在寻找具身人工智能&#xff08;Embodied AI&#xff09;领域的研究资源&#xff1f;是否希望有一个系统性的资源集合来加速你的研究&#xff1f;今天给大家推荐一个重磅项目&#xff01; &#x1f31f; 为什么需要这个项目&#xff1f; 具身人工智能是一…...

组件之间的信息传递的四种方法!!【vue3 前端】

迎万难 赢万难&#xff01; 目录 1. 使用 defineProps 传递数据&#xff1a;2. 使用。defineEmits 发送事件&#xff1a;3. 使用 Provide / Inject&#xff1a;4. 使用状态管理&#xff08;如 Pinia&#xff09;&#xff1a; 1. 使用 defineProps 传递数据&#xff1a; 父组件…...

单片机学习笔记9.数码管

0到99计数 &#xff0c;段选共阴极 ;0到99计数 ORG 0000H LJMP MAIN ORG 000BH LJMP TIMER0_ISR ORG 0100H; 定义位选控制位 DISPLAY_SELECT BIT 20H.0MAIN:; 定时器 0 初始化MOV TMOD, #01H ; 设置定时器 0 为模式 1MOV TH0, #3CH ; 定时器 0 高 8 位初值&#xff0c;定时 …...

Go 语言 核心知识点

Go 语言&#xff08;Golang&#xff09;是由 Google 开发的一种静态类型、编译型语言&#xff0c;设计目标是高效、简洁、并发友好。它借鉴了 C 语言的性能优势&#xff0c;同时引入了现代语言的特性&#xff08;如垃圾回收、并发原语&#xff09;&#xff0c;并摒弃了传统面向…...

【C++ 类和数据抽象】消息处理示例(2)

目录 一、消息处理系统的核心价值 1.1 现代软件架构中的消息驱动 1.2 消息处理系统的关键组件 二、消息处理系统概述 三、Message类设计 3.1 成员变量 3.2. 成员函数 3.3. 私有辅助函数 四、Folder类设计 五、代码实现 六、数据抽象在消息处理系统中的应用 七、总结…...

kafka 中消费者 groupId 是什么

&#x1f4da; 什么是 groupId&#xff1f; groupId 是 Kafka 里消费者组&#xff08;Consumer Group&#xff09;的唯一标识。 同一个 groupId 的消费者&#xff0c;一起共享消费&#xff0c;一条消息只给组内一个消费者处理。不同 groupId 的消费者组&#xff0c;各自独立消…...

单相交直交变频电路设计——matlab仿真+4500字word报告

微♥“电击小子程高兴的MATLAB小屋”获取巨额优惠 1.模型简介 硬件电路采用Altium designer设计&#xff0c;仿真采用Matlab软件 本仿真模型基于MATLAB/Simulink&#xff08;版本MATLAB 2018Rb&#xff09;软件。建议采用matlab2018Rb及以上版本打开。&#xff08;若需要其他…...

Python中的协程(Coroutine)

Python中的协程&#xff08;Coroutine&#xff09; 是一种轻量级的异步执行单元&#xff0c;主要用于解决IO密集型任务的性能问题。Python 3.5引入了 async/await 语法&#xff0c;使得协程变得简洁且易于使用。协程的核心是通过事件循环&#xff08;Event Loop&#xff09; 来…...

【QT】QT多线程

QT多线程 1.涉及到类和方法示例代码&#xff1a;未重写run函数 2.使用思路3.常用方法4.示例代码1&#xff1a;重写线程run函数现象&#xff1a; 5.示例代码2&#xff1a;多线程显示切换图片&#xff0c;使用公有方法现象&#xff1a; 1.涉及到类和方法 类&#xff1a;QThread 示…...

基于深度学习的医疗诊断辅助系统设计

标题:基于深度学习的医疗诊断辅助系统设计 内容:1.摘要 随着医疗数据的爆炸式增长和深度学习技术的飞速发展&#xff0c;开发基于深度学习的医疗诊断辅助系统具有重要的现实意义。本研究的目的在于设计一个高效、准确的医疗诊断辅助系统&#xff0c;以辅助医生进行更精准的诊断…...

C++ RAII

RAII&#xff08;Resource Acquisition Is Initialization&#xff0c;资源获取即初始化&#xff09;是 C 编程中的核心设计理念&#xff0c;用于管理资源的分配和释放。它通过将资源的生命周期绑定到对象的生命周期&#xff0c;利用 C 的自动对象管理机制&#xff08;主要是栈…...

Linux进程学习【环境变量】进程优先级

进程优先级的基本概念 在 Linux 中&#xff0c;每个进程都有一个优先级&#xff0c;操作系统根据这个优先级来决定进程的执行顺序。优先级越高&#xff0c;进程的执行就越频繁。通常&#xff0c;进程优先级是由以下两个部分构成&#xff1a; 静态优先级&#xff08;PRI&#x…...

Leetcode:283. 移动零

题目 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0]…...

BIOES 标签的含义

BIOES 标签的含义 ​B (Begin) 表示一个实体的开始。例如&#xff0c;在句子 “北京是中国的首都” 中&#xff0c;“北京” 作为地点实体的开头&#xff0c;首字会被标注为 B-LOC&#xff0c;后续字可能标注为 I-LOC。 ​I (Inside) 表示一个实体的中间或内部部分。例如&a…...

mAh 与 Wh:电量单位的深度解析

1. 基础定义与物理意义 1.1 mAh&#xff08;毫安时&#xff09; 定义&#xff1a;表示电池以毫安&#xff08;mA&#xff09;为单位的电流持续放电 1 小时的电荷量。1 mAh1 mA1 h3.6 C(库仑&#xff0c;电荷单位)局限性&#xff1a;仅反映电池存储的电荷量&#xff0c;未考虑电…...

安卓屏播放语音失败,报错TextToSpeech: speak failed: not bound to TTS engine

最近碰到一个很棘手的问题&#xff0c;无缘无故&#xff0c;之前在Android9.0跑得好好的程序&#xff0c;升级安装系统到Android13后&#xff0c;就发现之前能放的语音&#xff0c;现在放不了了&#xff0c;真是头大&#xff0c;所以我摸索着尝试解决&#xff0c;且看我的解决过…...

C语言学习之结构体

在C语言中&#xff0c;我们已经学了好几种类型的数据。比如整型int、char、short等&#xff0c;浮点型double、float等。但是这些都是基本数据类型&#xff0c;而这些数据类型应用在实际编程里显然是不够用的。比如我们没有办法用一旦数据类型来定义一个”人“的属性。因此这里…...

layui获取无法获取表单数据,data.field一直为空

form.on(submit(*), function(data){console.log(data.field) //当前容器的全部表单字段&#xff0c;名值对形式&#xff1a;{name: value}return false; //阻止表单跳转。如果需要表单跳转&#xff0c;去掉这段即可。}); console.log(data.field)一直显示为空&#xff0…...

「Mac畅玩AIGC与多模态02」部署篇01 - 在 Mac 上部署 Ollama + Open WebUI

一、概述 本篇介绍如何在 macOS 环境下本地部署 Ollama 推理服务,并通过 Open WebUI 实现可视化交互界面。该流程无需 CUDA 或专用驱动,适用于 M 系列或 Intel 芯片的 Mac,便于快速测试本地大语言模型能力。 二、部署流程 1. 环境准备 安装 Homebrew(如尚未安装):/bin…...

量子力学:量子通信

量子通信是利用量子力学原理对信息进行编码、传输和处理的新型通信方式&#xff0c;以下是其详细介绍及业界发展现状&#xff1a; 基本原理 量子叠加态 &#xff1a;量子系统可以处于多个状态的叠加&#xff0c;如光子的偏振方向可以同时处于水平和垂直方向的叠加态&#xff…...

《大型网站技术架构-核心原理与案例分析》笔记

:::info &#x1f4a1; 根据 遗忘曲线&#xff1a;如果没有记录和回顾&#xff0c;6天后便会忘记75%的内容 读书笔记正是帮助你记录和回顾的工具&#xff0c;不必拘泥于形式&#xff0c;其核心是&#xff1a;记录、翻看、思考::: 书名大型网站技术架构-核心原理与案例分析作者…...