uniapp(Vue)开发微信小程序 之 保存图片到本地
一、保存图片到本地(要拿到图片的 src
):
查看隐私条约是否加上相册(仅写入)权限:
微信公众平台 -》 左下角头像 -》账号设置 -》 用户隐私保护指引 -》去完善 -》 相册(仅写入)权限
1、判断用户是否授权相册权限:uni.getSetting
2、让用户授权:
① 引导用户授权:uni.authorize
② 通过设置让用户授权:uni.openSetting
3、下载图片:uni.downloadFile
4、保存到本地:uni.saveImageToPhotosAlbum
5、完整代码(包含文件的重命名):
// 点击下载按钮 -- 进行授权
downLoad() {const that = thisuni.getSetting({ success: function(res) {if (res.authSetting['scope.writePhotosAlbum']) { // 用户授权相册权限that.saveImg()} else { // 用户没有授权相册权限uni.showModal({title: '提示',content: '用户未授权相册权限,点击授权',success: function (res) {if (res.confirm) {uni.authorize({scope: 'scope.writePhotosAlbum',success: () => {that.saveImg()},fail: () => { // 用户拒绝授权,引导手动开启uni.showModal({title: '提示',content: '需授权相册权限才能保存图片',success: (res) => {if (res.confirm) uni.openSetting();}});} ,})} else {uni.showToast({title: "用户取消授权,不能使用下载功能",icon: "error",})}},})}},fail: function(error) {uni.showToast({title: "查询授权失败",icon: "error",})}})
},
// 保存图片 -- 直接保存,不做重命名处理
saveImg() {const that = thisuni.saveImageToPhotosAlbum({filePath: `图片的src`,success: res => {uni.showToast({title: "保存成功",icon: "success"})},fail: err => {console.log(err)}});
},
// 保存图片 -- 使用 uni.downloadFile 做重命名处理,ios会报错
saveImg2() {const that = thisconst newName = this.formatFileName('这是图片的新名字');uni.downloadFile({url: `图片的src`,filePath: uni.env.USER_DATA_PATH + "/" + newName + ".png",success(res) {if (res.statusCode === 200) {// 下载成功开始保存图片uni.saveImageToPhotosAlbum({filePath: res.tempFilePath,success: function() {uni.showToast({title: "保存成功",icon: "success",})},fail: function(error) {uni.showToast({title: "保存失败",icon: "error",})}})}},fail(error) {// 下载失败输出错误信息// that.showToast('下载失败')console.log('下载失败', error)}})
},
// 文件重命名,使用fs
saveImg3() {const that = thisconst newName = this.formatFileName('新名字');const fs = uni.getFileSystemManager();let codeImg = this.qrcode.srcfs.readFile({filePath: '图片的临时路径', // 例如:'/path/to/your/image.jpg'encoding: 'base64', // 指定编码格式为base64success: function (res) {var byte= res.data.replace("data:image/png;base64,","");fs.writeFile({filePath: uni.env.USER_DATA_PATH + "/" + newName + ".png", // fileName 需要保存的文件名称 (文件后缀根据需要修改)data: byte,encoding: "base64",success: (downloadRes) => {console.log("this.qrcode.codeUrl",downloadRes)uni.saveImageToPhotosAlbum({filePath: uni.env.USER_DATA_PATH + "/" + newName + ".png",success: res => {uni.showToast({title: "保存成功",icon: "success"})},fail: err => {console.log(err)}});},fail: (err) => {console.log(err);uni.showToast({icon: 'none',mask: true,title: '文件下载失败',});},});},fail: function (err) {console.error(err);}});
},
formatFileName(name) {return decodeURIComponent(name).replace(/%20/g, '').replace(/#/g, '%23');
},
6、文件的重命名ios
报错:
解决:
① 检查
downloadFile合法域名
②使用fs转base64
二、蓝牙连接打印机(使用了插件):
1、开启蓝牙权限:
"permission" : {"scope.userLocation": {"desc": "蓝牙搜索"},"scope.bluetooth": {"desc": "蓝牙搜索"}
},
2、下载要使用的sdk
,并且根据说明进行引入:
去官网找,根据平台进行下载。
举例使用的:https://www.detonger.com/#/
① 本文通过DCloud 插件市场下载
② 引入:
import {LPAPIFactory} from "@/uni_modules/dothan-lpapi-ble/js_sdk/index.js";
③ 初始化数据:
lpapi: null, // 打印对象
canvasId: "lpapi-ble-uni", // 绘图对象
labelWidth: 0, // 打印的宽度(单位mm)
labelHeight: 0,
printMode: 0, // 0是打印,1是预览
rotationIndex: 0,
rotationList: [{name: "横向打印",value: 0
},
{name: "右转90度",value: 90
},
{name: "转转180度",value: 180
},
{name: "左转90度",value: 270
},
],
gapList: [{name: "随打印机设置",value: 255
},
{name: "小票纸",value: 0
},
{name: "不干胶",value: 2
},
{name: "卡纸",value: 3
},
],
gapIndex: 0,
darknessList: [{name: "随打印机设置",value: 255
},
{name: "6 (正常)",value: 6
},
{name: "7",value: 7
},
{name: "8",value: 8
},
{name: "9",value: 9
},
{name: "10 (较浓)",value: 10
},
{name: "11",value: 11
},
{name: "12",value: 12
},
{name: "13",value: 13
},
{name: "14",value: 14
},
{name: "15 (最浓)",value: 15
},
],
darknessIndex: 0,
speedList: [{name: "随打印机设置",value: 255
},
{name: "最慢",value: 1
},
{name: "较慢",value: 2
},
{name: "正常",value: 3
},
{name: "较快",value: 4
},
{name: "最快",value: 5
},
],
speedIndex: 0,
④ 存储绘制好的图片:
<canvas :id="canvasId" :canvas-id="canvasId"
:style="{width: labelWidth + 'rpx', height: labelHeight + 'rpx'}"
style="position: fixed;left: -999999rpx;top: -999999rpx;" />
⑤ 点击按钮开始打印:
printCode() {const that = thisthat.lpapi = LPAPIFactory.getInstance({// 日志信息显示级别,值为 0 - 4,0表示不显示调试信息,4表示显示所有调试信息showLog: 4,// 钉钉小程序需要备注下,UniApp无法识别钉钉小程序。// isDingTalk: this.isAlipay ? true : false,// enablePageKey: true,// bleAdapter: bleAdapter,});// 搜索蓝牙设备that.lpapi.startBleDiscovery({timeout: 0,deviceFound: (res) => {let devices = res[0]console.log('打印机设备', devices)if (devices && devices.deviceId) {uni.showLoading({title: "正在链接打印机...",});this.lpapi.openPrinter({name: devices.name,deviceId: devices.deviceId,// 如果打印机链接失败的话,可以尝试连续进行多次链接。// tryTimes: isAlipay ? 1 : 5,success: (resp) => {console.log(`---- 【打印机链接成功】`);console.log(resp.resultInfo);uni.hideLoading();uni.showToast({title: "打印机链接成功!",icon: "success"});that.printModel()},fail: (resp) => {console.warn(`---- 【打印机链接失败】:`);console.warn(JSON.stringify(resp));//uni.hideLoading();//uni.showToast({title: "打印机链接失败!",icon: "fail"});},});} else {console.warn("---- 未检测到打印机!");uni.showToast({title: "未检测到打印机",icon: "fail"});}},});
},
// 开始打印
printModel() {const that = thisconst api = that.lpapi;let data = {"name": "这是一个标题","address": "这是地址,太长的话会换行,哈哈哈哈哈","type": "1" // 根据要求来调整样式,一个是横版,一个是竖版}let jobInfo = nullif(data.type == 1) {that.labelWidth = 70that.labelHeight = 50that.rotationIndex = 1jobInfo = api.startJob({width: that.labelWidth,height: that.labelHeight,orientation: that.getOrientation(),jobName: that.getJobName(),});if (!jobInfo) {console.warn("---------- 打印任务创建失败!----------");return false;}api.drawText({ text: data.name, x: 4, y: 5, fontHeight: 4 });api.drawText({ width: 24, height: 8, text: '地址:'+data.address, x: 4, y: 14, fontHeight: 3 });// 二维码api.draw2DQRCode({text: '这是二维码的链接',x: 44,y: 11,width: 21,});// 横线api.drawLine({ x1: 4, x2: 66, y1: 40,y2: 40, lineWidth: 0.1 });api.drawText({ text: '这就是结束了', x: 4, y: 42, fontHeight: 3 });} else {that.labelWidth = 50that.labelHeight = 70that.rotationIndex = 0jobInfo = api.startJob({width: that.labelWidth,height: that.labelHeight,orientation: that.getOrientation(),jobName: that.getJobName(),});if (!jobInfo) {console.warn("---------- 打印任务创建失败!----------");return false;}let textlen = data.modelName.length * 2let itemWidth = that.labelWidth / 2api.drawText({ text: data.name, x: itemWidth - textlen, y: 3, fontHeight: 4 });// 二维码api.draw2DQRCode({text: '这是二维码的链接',x: itemWidth - 11,y: 11,width: 21,horizontalAlignment: 1,});api.drawText({ text: '这就是结束了', x: 4, y: 42, fontHeight: 3 });}api.commitJob({gapType: that.getGapType(),printDarkness: that.getPrintDarkness(),printSpeed: that.getPrintSpeed(),}).then((resp) => {// this.previewLabel(resp);console.log('打印完毕',resp)return resp.statusCode === 0;});
},
getJobName() {if (this.printMode === 1) {return "#!#preview#!#";} else if (this.printMode === 2) {return "#!#transparent#!#";} else {return "lpapi-ble";}
},
getOrientation() {return this.rotationList[this.rotationIndex].value;
},
getGapType() {return this.gapList[this.gapIndex].value;
},
getPrintDarkness() {return this.darknessList[this.darknessIndex].value;
},
getPrintSpeed() {return this.speedList[this.speedIndex].value;
},
相关文章:
uniapp(Vue)开发微信小程序 之 保存图片到本地
一、保存图片到本地(要拿到图片的 src): 查看隐私条约是否加上相册(仅写入)权限: 微信公众平台 -》 左下角头像 -》账号设置 -》 用户隐私保护指引 -》去完善 -》 相册(仅写入)权限 …...
TailwindCss快速上手
什么是Tailwind Css? 一个实用优先的 CSS 框架,可以直接在标记中组合以构建任何设计。 开始使用Tailwind Css 如何安装 下面是使用vite构建工具的方法 ①安装 Tailwind CSS: tailwindcss通过tailwindcss/vitenpm安装。 npm install tailwindcss tailwindcss…...
Gladinet CentreStack Triofox 远程RCE漏洞(CVE-2025-30406)
免责声明 本文档所述漏洞详情及复现方法仅限用于合法授权的安全研究和学术教育用途。任何个人或组织不得利用本文内容从事未经许可的渗透测试、网络攻击或其他违法行为。使用者应确保其行为符合相关法律法规,并取得目标系统的明确授权。 对于因不当使用本文信息而造成的任何直…...
ASP.NET WEB 手动推送 URL 到百度站长工具实例
下面是一个完整的 ASP.NET Web 应用程序示例,演示如何手动推送 URL 到百度站长工具。 1. 创建推送页面 (PushToBaidu.aspx) <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="PushToBaidu.aspx.cs" Inherits="BaiduPushEx…...
【Ragflow】18.更好的推理框架:vLLM的docker部署方式
概述 看到不少人说“Ollama就图一乐,生产环境还得用vLLM”。 本文决定使用docker对vLLM进行部署,并解决模型配置中,IP地址的硬编码问题。 Ollama与vLLM风评比较 查询相关资料,Ollama与vLLM主要特点及对比情况如下[1]: Ollama:轻量级本地大模型部署工具,面向个人用户…...
智能 GitHub Copilot 副驾驶® 更新升级!
智能 GitHub Copilot 副驾驶 迎来重大升级!现在,所有 VS Code 用户都能体验支持 Multi-Context Protocol(MCP)的全新 Agent Mode。此外,微软还推出了智能 GitHub Copilot 副驾驶 Pro 订阅计划,提供更强大的…...
什么是高防服务器
高防服务器是具备高强度防御能力、专门应对网络攻击(如DDoS、 CC攻击)的服务器类 型,通过流量清洗、多层防护等技术保障业务稳定运行。具备高强度防御能力和智能攻击识别技术,可保障业务在极端网络环境下稳定运行。其核心特点及技术原理如下:…...
纷析云开源财务软件:企业财务数字化转型的灵活解决方案
纷析云是一家专注于开源财务软件研发的公司,自2018年成立以来,始终以“开源开放”为核心理念,致力于通过技术创新助力企业实现财务管理的数字化与智能化转型。其开源财务软件凭借高扩展性、灵活部署和全面的功能模块,成为众多企业…...
open webui 介绍 是一个可扩展、功能丰富且用户友好的本地部署 AI 平台,支持完全离线运行。
AI MCP 系列 AgentGPT-01-入门介绍 Browser-use 是连接你的AI代理与浏览器的最简单方式 AI MCP(大模型上下文)-01-入门介绍 AI MCP(大模型上下文)-02-awesome-mcp-servers 精选的 MCP 服务器 AI MCP(大模型上下文)-03-open webui 介绍 是一个可扩展、功能丰富且用户友好的…...
Spring缓存抽象机制
一、核心架构图解 #mermaid-svg-pUShmqsPanYTNVBI {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-pUShmqsPanYTNVBI .error-icon{fill:#552222;}#mermaid-svg-pUShmqsPanYTNVBI .error-text{fill:#552222;stroke:#5…...
[Jenkins]pnpm install ‘pnpm‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
这个错误提示再次说明:你的系统(CMD 或 Jenkins 环境)找不到 pnpm 命令的位置。虽然你可能已经用 npm install -g pnpm 安装过,但系统不知道它装在哪里,也就无法执行 pnpm 命令。 ✅ 快速解决方法:直接用完…...
如何用AI辅助数据分析及工具推荐
以下是针对数据分析的 AI辅助工具推荐,结合国内外主流工具的功能特点、优劣势及适用场景分析,并标注是否为国内软件及付费情况: 一、国内工具推荐 1. WPS AI 特点:集成于WPS Office套件,支持智能数据分析、自动生成可…...
使用KeilAssistant代替keil的UI界面
目录 一、keil Assistant的优势和缺点 二、使用方法 (1)配置keil的路径 (2)导入并使用工程 (3)默认使用keil自带的ARM编译器而非GUN工具链 一、keil Assistant的优势和缺点 在日常学…...
spark-SQL数据加载和保存
数据加载与保存 通用方式: 通过 spark.read.load 和 df.write.save 实现数据加载与保存。可利用 format 指定数据格式,如 csv 、 jdbc 等; option 用于设置特定参数,像 jdbc 格式下的数据库连接信息; load 和 save 则…...
strings.Replace 使用详解
目录 1. 官方包 2. 支持版本 3. 官方说明 4. 作用 5. 实现原理 6. 推荐使用场景和不推荐使用场景 推荐场景 不推荐场景 7. 使用场景示例 示例1:官方示例 示例2:模板变量替换 示例3:敏感信息脱敏(隐藏手机号中间四位&a…...
K8S微服务部署及模拟故障观测
概述 本文介绍了如何在 Kubernetes (K8S) 集群中部署微服务,并模拟常见的故障场景(如 Pod 故障、节点故障、网络故障)以测试系统的容错能力。通过本实验,了解 Kubernetes 的自动恢复机制以及如何通过监控和日志分析快速定位和解决…...
3.k8s是如何工作的
Kubernetes 是一个复杂的分布式系统,其核心设计理念是 声明式管理 和 自动化控制。以下是 Kubernetes 的工作机制详解,从用户提交应用到容器运行的全流程: 1. 核心架构:控制平面(Control Plane)与工作节点&…...
打通任督二脉 - Device Plugin 让 k8s “看见” GPU
打通任督二脉 - Device Plugin 让 k8s “看见” GPU 上一篇咱们聊了为啥要把 GPU 这个“计算猛兽”拉进 Kubernetes (k8s) 这个“智能调度中心”。目标很美好:提高效率、简化管理、弹性伸缩。但现实是,k8s 天生并不认识 GPU 这位“新朋友”。就像你的电脑操作系统,默认只认…...
锚定“体验驱动”,锐捷EDN让园区网络“以人为本”
作者 | 曾响铃 文 | 响铃说 传统的网络升级路径,一如巴别塔的建造思路一般——工程师们按技术蓝图逐层堆砌,却常与地面用户的实际需求渐行渐远,从而带来了诸多体验痛点,如手工配置效率低下、关键业务用网无法保障、网络架构趋于…...
Flutter的自动化测试 python flutter编程
Flutter应用开发入门指南 第一步:创建Flutter应用 创建一个默认的Flutter应用后,将以下代码复制到 lib/main.dart 中: import package:flutter/material.dart;//运行Flutter应用,创建了一个自己实现的Widget对象 void main() > runApp(…...
Day09【基于jieba分词和RNN实现的简单中文分词】
基于jieba分词和RNN实现的中文分词 目标数据准备主程序预测效果 目标 本文基于给定的中文词表,将输入的文本基于jieba分词分割为若干个词,词的末尾对应的标签为1,中间部分对应的标签为0,同时将分词后的单词基于中文词表做初步序列…...
机器学习 | 神经网络介绍 | 概念向
文章目录 📚从生物神经元到人工神经元📚神经网络初识🐇激活函数——让神经元“动起来”🐇权重与偏置——调整信息的重要性🐇训练神经网络——学习的过程🐇过拟合与正则化——避免“死记硬背” 👀…...
使用cursor进行原型图设计
1.下载cursor 2.模式设置: 模型使用claude-3.7-sonnet的think模式 3.引导词模板: 我想要开发一个中高考英语口语考试的模拟考试系统,我需要将上面的这个应用输出成高保真的原型图设计。请考虑以下的规范: 用户体验࿱…...
Vue el-from的el-form-item v-for循环表单如何校验rules(二)
在上一篇文章中,通过校验规则写成内联循环去校验from表单项,在之前的代码基础上,进行校验规则的二次封装,使代码更加简洁,灵活高效、 参考上一篇:Vue el-from的el-form-item v-for循环表单如何校验rules&a…...
Spark-SQL3
Spark-SQL 一.Spark-SQL核心编程(四) 1.数据加载与保存: 1)通用方式: SparkSQL 提供了通用的保存数据和数据加载的方式。这里的通用指的是使用相同的API,根据不同的参数读取和保存不同格式的数据&#…...
Redis字符串类型实战:解锁五大高频应用场景
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Redis的字符串(String)类型是最基础的数据结构,但其灵活性和原子性操作使其成为解决高并发场景问题的利器。本文通过真实项…...
通信算法之266: 无人机信号带宽计算
pwelch 通常返回功率谱密度(PSD)和对应的频率向量。带宽的计算可能涉及到找到 PSD 的有效频率范围,比如半功率点(-3dB)或者根据信号的能量集中区域。 pwelch 的参数设置,比如窗函数、重叠、FFT 点数&#x…...
【MySQL】前缀索引、索引下推、访问方法,自适应哈希索引
最左前缀原则 对于INDEX(name, age)来说最左前缀可以是联合索引的最左N个字段, 也可以是字符串索引的最左M个字符。 SELECT * FROM t WHERE name LIKE 张%其效果和单独创建一个INDEX(name)的效果是一样的若通过调整索引字段的顺序, 可以少维护一个索引树, 那么这个顺序就是需要…...
【C++游戏引擎开发】第16篇:ImGui指南
ImGui官方Github ImGUI(即时模式图形用户界面)是一种颠覆传统GUI开发范式的界面系统,由Casey Muratori于2005年提出概念,后经Omar Cornut开发为Dear ImGui开源库。其核心设计理念彻底改变了开发者构建交互式工具的方式。 一、vcpkg安装与特点介绍 1.1 安装 vcpkg install…...
分享一下这几天在公司学到的东西
这几天我学到了很多东西 (1)我自己原来写项目,前后端联调用的都是postman,然后直接测试接口,然后连一下就完了。这几天我接触到了apifox的Mock这个东西!我知道了一个前端工程师进行前后端链条的时候&#…...
C# 将Excel格式文件导入到界面中,用datagridview显示
界面按钮不做介绍。 主要代码: //用于获取从上一个页面传过来datagridview标题 public DataTable GetHeader { get; set; } private void UI_EXPINFO_Load(object sender, EventArgs e) { //页面加载显示listbox1中可…...
Shell编程之正则表达式与文本
目录 一 正则表达式 1 正则表达式的定义 2 正则表达式用途 二 正则表达式类型 1 基础正则表达式示例 (1)查找特定字符 (2)利用中括号” [] “来查找集合字符 (3)查找行首” ^ “与行尾字符”$“ &…...
Spring JDBC 与数据访问:从性能优化到事务协同
在高并发场景(如电商、金融等行业),数据库访问的性能和事务一致性是系统稳定性的关键。 Spring JDBC通过模板化操作和事务管理机制,大幅简化了传统 JDBC 繁琐的 API 处理,使数据库操作更加高效、安全、可维护。 一、…...
Markdown 编辑器的使用
欢迎使用 Markdown 编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持&…...
自动化浏览器环境与 Node.js 环境的逆向分析:完整教程
在当今的 Web 开发中,了解浏览器环境与 Node.js 环境之间的差异是非常重要的,特别是当你希望进行自动化操作、逆向工程或进行跨平台开发时。在这篇教程中,我们将探讨如何通过 JavaScript 在浏览器中自动化环境检测、分析并对比 Node.js 和浏览…...
脉冲编码调制(PCM)在三角形信号中的应用
基于MATLAB平台,详细阐述脉冲编码调制(PCM)在三角形信号处理中的全流程实现。我这里将变量名更改为具有辨识度的Dogness_、Lhuu_,包括信号生成、均匀量化、编码、解码及解量化过程,为数字信号处理提供实践参考。 Dogne…...
# 03_Elastic Stack 从入门到实践(三)-- 4
03_Elastic Stack 从入门到实践(三)-- 4 七、Elasticsearch之中文分词器(IK分词器) 1、什么是分词? 分词:就是指将一个文本转化成一系列单词的过程,也叫文本分析,在Elasticsearch…...
前端VUE框架理论与应用(10)
1、记住全局注册的行为必须在根 Vue 实例 (通过 new Vue) 创建之前发生。 2、要注意,以 / 开头的嵌套路径会被当作根路径。 这让你充分的使用嵌套组件而无须设置嵌套的路径。 3、注意:在 Vue 实例内部,你可以通过 $router 访问路由实例。因此你可以调用 this.$router.push…...
基础学习:(6)nanoGPT
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言1 nanoGPT 浅尝1.1 基础环境1.2 prepare.py1.2 train.py1.3 sample.py 2 再探gpt2.1 layer_norm2.2 KQV 和 self attention2.3 masked self-attention2.4 调用构…...
python支持自定义基准的相对误差计算
def is_within_tolerance_custom(a, b, tolerance0.1, reference“max”): “”" 支持自定义基准的相对误差计算。 参数:reference (str): 基准类型,可选 "max"(默认)、"min"、"mean"、"a"&am…...
力扣DAY52-54 | 热100 | 图论:腐烂的橘子、课程表、前缀树
前言 中等 √ 腐烂的橘子用层次遍历,课程表用俩哈希表,前缀树基本与题解一致。however不太规范。 腐烂的橘子 我的题解 层次遍历,先找出所有腐烂的橘子进入队列并记录数量,接着内层遍历第一层腐烂的橘子,上下左右四…...
java CountDownLatch用法简介
CountDownLatch倒计数锁存器 CountDownLatch:用于协同控制一个或多个线程等待在其他线程中执行的一组操作完成,然后再继续执行 CountDownLatch用法 构造方法:CountDownLatch(int count),count指定等待的条件数(任务…...
科技项目验收测试报告有哪些作用?需要多长时间和费用?
在当今快速发展的科技环境中,科技项目的有效验收至关重要。对于公司、开发团队以及客户来说,科技项目验收测试报告更是一个不可缺少的一项重要环节。 科技项目验收测试报告是对一个项目在开发完成后所进行的一系列测试结果的总结。这份报告不仅用于证明…...
网络原理面试题
1.如何理解 URI? URI, 全称为(Uniform Resource Identifier), 也就是统一资源标识符,它的作用很简单,就是区分互联网上不同的资源。但是,它并不是我们常说的网址, 网址指的是URL, 实际上URI包含了URN和URL两个部分,由于 URL 过于普及,就默认将 URI 视为 URL 了。 URI 的…...
专为路由器和嵌入式设备设计的OpenWrt是什么?
OpenWrt是一款基于Linux内核的开源嵌入式操作系统,专为路由器和嵌入式设备设计。自2004年诞生以来,它已成为替代商业固件的首选方案,凭借其高度可定制性、模块化架构和活跃的开发者社区,广泛应用于家庭网络、企业级设备、物联网(IoT)及安全领域。以下从多个维度展开详细介…...
NVIDIA RTX™ GPU 低成本启动零售 AI 场景开发
零售行业正在探索应用 AI 升级客户体验,同时优化内部流程。面对多重应用场景以及成本优化压力,团队可采用成本相对可控的方案,来应对多重场景的前期项目预演和落地,避免短期内大规模投入造成的资源浪费。 客户体验 AI 场景的研究…...
element-ui自定义主题
此处的element-ui为基于vue2.x的 由于https://element.eleme.cn/#/zh-CN/theme/preview(element的主题)报错503, 所以使用https://element.eleme.cn/#/zh-CN/component/custom-theme 自定义主题文档中,在项目中改变scss变量的方…...
PhotoShop学习10
1.画板功能的使用 使用画板功能可以轻松针对不同的设备和屏幕尺寸设计网页和 APP。画板是一种容器,类似于特殊图层组。画板中的图层在图层面板中,按画板进行分组。 使用画板,一个文档中可以有多个设计版面,这样可以在画板之间轻…...
基于LLVM设计领域专用语言(DSL)的步骤——以激光微加工为例
1. 明确DSL的设计目标 在激光微加工领域,DSL需解决以下问题: • 工艺参数抽象化:激光功率、频率、扫描路径等需用高阶语法描述,而非底层G代码。 • 实时性要求:控制指令需低延迟编译为机器码(如FPGA或运动控…...
【MAUI】IOS保活
文章目录 概述sevice使用 概述 每种方法都是独立的,可以根据应用的需求单独使用。例如,如果应用的主要功能是跟踪用户的地理位置,则可以仅使用后台定位;若是为了保持应用在后台运行以完成特定任务(比如上传数据&#…...