微信小程序中使用h5页面预览图片、视频、pdf文件
遇到了这么一个需求,需要在微信小程序中点击文件,进行文件预览。
要求:
- 图片:长图需要宽度100%高度自适应;横图的话宽度100%,高度居中显示
- 视频:视频不管横向还是竖向都居中显示,有全屏播放按钮
- pdf:pdf需要宽度100%,高度自适应。可以预览多页pdf文件。
概要:
使用原生html、js、css写的,通过url吧要预览的文件的url传递过去。
图片使用<img>进行预览,自己写样式
视频使用的是video.js进行的预览,我发现这个可以兼容安卓和苹果手机,而且预览速度很快。
pdf使用的是pdf.min.js进行的预览。--就这玩意不好整
代码:
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"><title>文件预览工具</title><style>* {margin: 0;padding: 0;box-sizing: border-box;}body {font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;background-color: #f5f5f5;color: #333;height: 100vh;}.modal-content {width: 100%;height: 100%;display: flex;flex-direction: column;}#pdf-container {width: 100%;flex-grow: 1;}#video-container {width: 100%;margin: auto;flex-grow: 1;display: flex;align-items: center;}#image-container {width: 100%;min-height: 100vh;flex-grow: 1;display: flex;align-items: center;justify-content: center;}#image-container img {width: 100%;}.loading {width: 100%;height: 100vh;background: rgba(0, 0, 0, 0.5);display: flex;justify-content: center;align-items: center;color: white;}/* 如果你想要一个旋转动画 */.loading::after {content: "";width: 30px;height: 30px;border: 3px solid rgba(255, 255, 255, 0.3);border-radius: 50%;border-top-color: white;animation: spin 1s linear infinite;}@keyframes spin {to { transform: rotate(360deg); }}.error {color: white;text-align: center;margin-top: 50%;padding: 20px;}.video-js .vjs-big-play-button{top: 50% !important;left: 50% !important;transform: translate(-50%, -50%);}/* PDF 控制栏样式 */.pdf-controls {position: fixed;bottom: 20px;left: 50%;transform: translateX(-50%);background: rgba(0, 0, 0, 0.7);padding: 10px 15px;border-radius: 20px;display: flex;align-items: center;color: white;z-index: 100;}.pdf-controls button {background: none;border: none;color: white;font-size: 16px;padding: 5px 10px;cursor: pointer;}.pdf-controls span {margin: 0 10px;}.pdf-page {margin-bottom: 20px;box-shadow: 0 2px 5px rgba(0,0,0,0.1);width: 100% !important;height: auto !important;}.pdf-page canvas {width: 100% !important;height: auto !important;display: block;}</style><!-- Video.js 视频播放器 --><link href="https://vjs.zencdn.net/7.20.3/video-js.css" rel="stylesheet"><script src="https://vjs.zencdn.net/7.20.3/video.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.10.377/pdf.min.js"></script><script>// 设置PDF.js worker路径pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.10.377/pdf.worker.min.js';</script>
</head>
<body><!-- 预览模态框 --><div id="preview-modal" class="modal"><div class="modal-content"><div id="image-container" style="display: none;"><img id="preview-image" src="" class="img-box"></div><div id="video-container" style="display: none;"><video id="preview-video" class="video-js" controls playsinline style="width: 100%;height: 100vh;"></video></div><div id="pdf-container" style="display: none;"></div><div id="loading" class="loading"></div><div id="error" class="error" style="display: none;"></div><!-- PDF 控制栏 --><div id="pdf-controls" class="pdf-controls" style="display: none;"><button id="prev-page">上一页</button><span id="page-num">1 / 1</span><button id="next-page">下一页</button></div></div></div><script>// 获取URL参数function getQueryParam(name) {const urlParams = new URLSearchParams(window.location.search);return urlParams.get(name);}// 获取文件类型function getFileType(url) {if (!url) return null;// 提取文件扩展名const extension = url.split('.').pop().toLowerCase().split('?')[0];// 图片类型const imageTypes = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp'];if (imageTypes.includes(extension)) return 'image';// 视频类型const videoTypes = ['mp4', 'webm', 'ogg', 'mov'];if (videoTypes.includes(extension)) return 'video';// PDF类型if (extension === 'pdf') return 'pdf';return null;}// 预览文件函数function previewFile(url) {const modal = document.getElementById('preview-modal');const loading = document.getElementById('loading');const errorDiv = document.getElementById('error');const imageContainer = document.getElementById('image-container');const videoContainer = document.getElementById('video-container');const pdfContainer = document.getElementById('pdf-container');// 显示加载中和模态框loading.style.display = 'flex';errorDiv.style.display = 'none';imageContainer.style.display = 'none';videoContainer.style.display = 'none';pdfContainer.style.display = 'none';modal.style.display = 'block';console.log('加载开始');// 获取文件类型const fileType = getFileType(url);if (!fileType) {loading.style.display = 'none';errorDiv.style.display = 'block';errorDiv.textContent = '不支持的文件类型或URL格式不正确';return;}// 根据文件类型处理if (fileType === 'image') {const img = document.getElementById('preview-image');img.alt = '图片预览';img.onload = function() {loading.style.display = 'none';imageContainer.style.display = 'flex';};img.onerror = function() {showError('图片加载失败');};img.src = url;} else if (fileType === 'video') {loading.style.display = 'none';videoContainer.style.display = 'flex';// 初始化视频播放器const player = videojs('preview-video', {controls: true,autoplay: true,preload: 'auto',playsinline: true,poster: url + '?vframe/png/offset/1',sources: [{src: url,type: getVideoMimeType(url)}]});player.on('error', function() {showError('视频加载失败');});// 存储播放器实例以便关闭时销毁modal.dataset.player = player;} else if (fileType === 'pdf') {pdfContainer.style.display = 'block';const previewContainer = document.getElementById('pdf-container');// 存储PDF相关变量let pdfDoc = null;let currentPage = 1;let pageRendering = false;let pageNumPending = null;const scale = 1.0;// 获取DOM元素const prevPageBtn = document.getElementById('prev-page');const nextPageBtn = document.getElementById('next-page');const pageNumSpan = document.getElementById('page-num');// 渲染PDF页面function renderPage(num) {pageRendering = true;// 使用promise获取页面pdfDoc.getPage(num).then(function(page) {const viewport = page.getViewport({ scale: scale });// 创建容器divconst pageDiv = document.createElement('div');pageDiv.className = 'pdf-page';pageDiv.id = `page-${num}`;// 移除旧的页面元素const oldPage = document.getElementById(`page-${num}`);if (oldPage) oldPage.remove();// 创建canvas元素const canvas = document.createElement('canvas');const context = canvas.getContext('2d');// 设置canvas尺寸canvas.height = viewport.height;canvas.width = viewport.width;// 将canvas添加到页面容器pageDiv.appendChild(canvas);// 将页面容器添加到PDF容器pdfContainer.appendChild(pageDiv);// 渲染PDF页面到canvas上const renderContext = {canvasContext: context,viewport: viewport};const renderTask = page.render(renderContext);// 渲染完成renderTask.promise.then(function() {pageRendering = false;if (pageNumPending !== null) {// 有新页面要渲染renderPage(pageNumPending);pageNumPending = null;}// 更新页面显示pageNumSpan.textContent = `${currentPage} / ${pdfDoc.numPages}`;// 加载完成if (currentPage === 1) {loading.style.display = 'none';}});});}// 跳转到指定页面function gotoPage(num) {if (pageRendering) {pageNumPending = num;} else if (num !== currentPage && num > 0 && num <= pdfDoc.numPages) {currentPage = num;renderPage(currentPage);// 滚动到页面顶部const pageElement = document.getElementById(`page-${currentPage}`);if (pageElement) {pageElement.scrollIntoView();}}}// 上一页prevPageBtn.onclick = function() {if (currentPage <= 1) return;gotoPage(currentPage - 1);};// 下一页nextPageBtn.onclick = function() {if (currentPage >= pdfDoc.numPages) return;gotoPage(currentPage + 1);};// 异步加载PDF文档pdfjsLib.getDocument(url).promise.then(function(pdfDoc_) {pdfDoc = pdfDoc_;// 更新页面总数显示pageNumSpan.textContent = `1 / ${pdfDoc.numPages}`;// 初始渲染第一页renderPage(1);// 预加载后续页面for (let i = 2; i <= Math.min(999999, pdfDoc.numPages); i++) {renderPage(i);}}).catch(function(error) {console.error('Error loading PDF:', error);showError('PDF加载失败');});}}// 获取视频MIME类型function getVideoMimeType(url) {const extension = url.split('.').pop().toLowerCase().split('?')[0];switch(extension) {case 'mp4': return 'video/mp4';case 'webm': return 'video/webm';case 'ogg': return 'video/ogg';default: return 'video/mp4';}}// 显示错误信息function showError(message) {document.getElementById('loading').style.display = 'none';const errorDiv = document.getElementById('error');errorDiv.style.display = 'block';errorDiv.textContent = message;}// 关闭模态框function closeModal() {const modal = document.getElementById('preview-modal');modal.style.display = 'none';// 如果有视频播放器实例,则销毁它if (modal.dataset.player) {modal.dataset.player.dispose();delete modal.dataset.player;}// 如果有图片查看器实例,则销毁它if (modal.dataset.viewer) {modal.dataset.viewer.destroy();delete modal.dataset.viewer;}}// 点击模态框背景关闭document.getElementById('preview-modal').addEventListener('click', function(e) {if (e.target === this) {closeModal();}});// 页面加载完成后自动处理document.addEventListener('DOMContentLoaded', function() {const fileUrl = getQueryParam('url');if (fileUrl) {previewFile(fileUrl);} else {showError('未提供文件URL参数');document.getElementById('preview-modal').style.display = 'block';document.getElementById('loading').style.display = 'none';}});</script>
</body>
</html>
使用:
http://192.168.3.189:5500/preview.html?url=https://kt.sh-t.com.cn/sqb/c4cee917056c24b0030864d661d92c2f.pdf
像这样传递参数就行。
相关文章:
微信小程序中使用h5页面预览图片、视频、pdf文件
遇到了这么一个需求,需要在微信小程序中点击文件,进行文件预览。 要求: 图片:长图需要宽度100%高度自适应;横图的话宽度100%,高度居中显示视频:视频不管横向还是竖向都居中显示,有…...
A2A协议详解:打造统一的AI代理通信标准,实现多Agent系统协同
A2A 协议中文说明 文章目录 A2A 解决现有 Agent 问题 Agent 生态系统现状当前面临的主要问题为什么需要统一协议,有个标准采用复用 A2A 解决方案 统一通信标准代理能力发现机制安全协作框架灵活的交互模式 A2A 与 MCP 的关系 MCP 简介两者的区别与联系集成场景协同…...
博客系统案例练习2-用户注册-redis
前言 用户注册 [请求]/user/register[参数]contentType: application/json{"userName":"wangwu","password":"456789","githubUrl": "https://gitee.com/bubble-fish666/spring-cloud","email": &quo…...
【人工智能】推荐开源企业级OCR大模型InternVL3
推荐开源企业级OCR大模型InternVL3 文章参考来源: https://huggingface.co/OpenGVLab/InternVL3-14B-Instruct https://www.aivi.fyi/llms/deploy-InternVL3 InternVL3,这是一个高级多模态大型语言模型 (MLLM) 系列,展示了卓越的整…...
聊天室项目
一.完善注册页面 1.完善注册页面图标,添加检测注册页面各个登录信息是否完善,并且通过信号和槽与自定义一个计时器,当注册完毕后跳转到显示注册完毕的页面。 2.各个坚持注册页面是否按要求的函数 3.完善主页面,设置信号和槽&…...
并发设计模式实战系列(4):线程池
🌟 大家好,我是摘星! 🌟 今天为大家带来的是并发设计模式实战系列,第四章线程池(Thread Pool),废话不多说直接开始~ 目录 一、核心原理深度拆解 1. 线程池核心组件 2. 核心…...
大模型应用案例:主动提问式的 AI 面试官(接入 DeepSeek)
目录 核心逻辑 效果演示 技术选型 大模型应用开发框架:langchain-deepseek UI 展示框架—streamlit 代码获取 后续改进想法 本文附带详细的视频讲解,欢迎小伙伴们来支持—— 【代码宇宙017】大模型:主动提问式的 AI 面试官࿰…...
算法笔记—动态规划
1137. 第 N 个泰波那契数 - 力扣(LeetCode) class Solution { public:int tribonacci(int n) {if(n0) return 0;if(n1||n2) return 1;vector<int> dp(4);//初始化dp[0]0; dp[1]1; dp[2]1;for(int i3;i<n1;i){//滚动数组优化需要循环dp[i%4]dp[…...
Vue3集成Element Plus完整指南:从安装到主题定制上
一、Element Plus简介 Element Plus是一套基于Vue 3.0的桌面端组件库,由饿了么前端团队开源维护。它提供了丰富的UI组件,能够帮助开发者快速构建企业级中后台产品。 1. 安装与卸载 bash 复制 下载 # 安装最新版本 npm install element-plus -S# 卸…...
初识javascript
1. JavaScript 基础语法 (1) 变量声明 JavaScript支持三种声明变量的方式: var:传统的变量声明方式,存在作用域问题(函数作用域)。 let:块级作用域变量声明方式,避免了var的作用域问题。 co…...
C++项目 —— 基于多设计模式下的同步异步日志系统(5)(单例模式)
C项目 —— 基于多设计模式下的同步&异步日志系统(5)(单例模式) 一个问题单例模式实现1. 单例模式:全局唯一实例功能:实现细节:作用: 2. 日志器的注册与查找功能:实现…...
rag搭建,是如何进行向量匹配检索的?
RAG 里为什么要“向量检索”? 在 Retrieval-Augmented Generation (RAG) 中,我们的目标是让 LLM 能够“回答它本身不知道的内容”。做法是: 将知识(文本)进行向量化,存入向量数据库;用户提问后,也将问题向量化;去数据库里 找出与这个问题最相似的一批知识,返回喂给 …...
k8s 基础入门篇之开启 firewalld
前面在部署k8s时,都是直接关闭的防火墙。由于生产环境需要开启防火墙,只能放行一些特定的端口, 简单记录一下过程。 1. firewall 与 iptables 的关系 1.1 防火墙(Firewall) 定义: 防火墙是网络安全系统&…...
C++在VR/AR图形处理开发中的实战应用
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C、C#等开发语言,熟悉Java常用开…...
Matlab 基于模型参考自适应法和SVPWM的异步电机控制
1、内容简介 Matlab 212-基于模型参考自适应法和SVPWM的异步电机控制 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...
深入浅出讲解UDP检验中如何计算检验和
一、计算机中的进制:二进制与十六进制 1. 十进制(Decimal) 特点:用0-9表示,逢10进1。 例子:数字 123 表示 110221013100110221013100。 2. 二进制(Binary) 特点:用0和…...
Python类和对象一(十)
封装: 在创建对象之前,通过类将相关的属性和方法打包到一起,然后通过类来生成响应的对象 定义类: 创建对象: 方法里面有个参数self:new的对象 当我们调用类里面方法的时候,py是怎么知道是哪…...
jupyter切换存储路径
一、问题描述 当我采用官网提供的安装方式pip install jupyterlab,在Windows下的powershell里安装jupyterlab成功,并启动:jupyter lab 打开网页:http://localhost:8888/lab 显示如下:成功了,可是我发现这…...
PH热榜 | 2025-04-20
1. Checklist GG 标语:基于人工智能的清单管理工具 介绍:checklist.gg 是一款基于人工智能的检查清单管理工具,旨在帮助组织确保每次都能准确完成任务。 产品网站: 立即访问 Product Hunt: View on Product Hunt 关…...
YOLOv11改进——基于注意力机制和密集小目标增强型EVA模块的设计与实现
随着计算机视觉技术的快速发展,目标检测算法在实时性与检测精度间的平衡成为研究重点。YOLO(You Only Look Once)系列算法以其高效性和准确性,长期占据实时目标检测领域的前沿位置。然而,尽管最新版本在通用场景表现优…...
n8n 中文系列教程_04.半开放节点深度解析:Code与HTTP Request高阶用法指南
在低代码开发领域,n8n凭借其独特的半开放架构打破了传统自动化工具的边界。本文深度剖析两大核心节点——Code与HTTP Request,从底层原理到企业级实战,揭秘如何通过代码自由扩展与API无缝集成,突破平台限制。无论是对接国产生态&a…...
Linux学习——了解和熟悉Linux系统的远程终端登录
Linux学习——了解和熟悉Linux系统的远程终端登录 一.配置Ubuntu系统的网络和用户 1、设置虚拟机网络为桥接模式 打开VMWare,选择编辑虚拟机设置,在网络适配器设置中,选择“桥接模式”,保存设置并启动Ubuntu。 2、配置Ubuntu的…...
PFLM: Privacy-preserving federated learning with membership proof证明阅读
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…...
十倍开发效率 - IDEA插件之 Maven Helper
0X00 先看效果 第一个选项表示存在冲突的依赖,可以看到图片中 mysql 的连接依赖发生了冲突,在低版本的上面直接右键选择 Exclude,冲突的依赖就被解决掉了。 0X01 安装 在 Plugins 中直接搜索 Maven Helper,选择第一个进行安装&am…...
线程安全总结
1.线程安全 1.1什么是线程安全 线程安全问题指的是当多个线程同时访问和操作共享资源(如变量、数据结构等)时,由于缺乏有效的同步控制,导致程序出现不可预期的错误或数据不一致的现象。其核心在于并发操作破坏了程序的正确性。 …...
计算机视觉cv入门之答题卡自动批阅
前边我们已经讲解了使用cv2进行图像预处理与边缘检测等方面的知识,这里我们以答题卡自动批阅这一案例来实操一下。 大致思路 答题卡自动批阅的大致流程可以分为这五步:图像预处理-寻找考试信息区域与涂卡区域-考生信息区域OCR识别-涂卡区域填涂答案判断…...
10.QT-显示类控件|LCD Number|ProgressBar|Calendar Widget(C++)
LCD Number QLCDNumer 是⼀个专⻔⽤来显⽰数字的控件.类似于"⽼式计算器"的效果 属性说明intValueQLCDNumber 显⽰的数字值(int).valueQLCDNumber 显⽰的数字值(double).和intValue是联动的.例如给value设为1.5,intValue的值就是2.另外,设置value和intValue的⽅法名…...
深入探索 Unix 与 Linux:历史、内核及发行版
引言 在当今的计算世界中,Unix 和 Linux 操作系统的影响力无处不在。从驱动互联网的服务器到我们口袋里的智能手机,再到无数嵌入式设备,它们的身影随处可见 1。这两个操作系统家族共享着丰富的历史和相似的设计哲学,但又各自走过…...
HCIP第三次作业
一、实验要求 1,R5为ISP,其上只能配置IP地址;R4作为企业边界路由器, 出口公网地址需要通过PPP协议获取,并进行chap认证 2整个0SPF环境IP基于172.16.0.0/16划分; 3所有设备均可访问R5的环回; 4减少LSA的更新量,加快收敛…...
Linux 入门:基础开发工具(下)git,cgdb操作指南
目录 一.进度条 一).补充:回车与换行 二).行缓冲区 三).进度条代码 二.版本控制器Git 一).Git 安装与配置 二).创建仓库 三).开始操作 1.简单流程 2.配置公钥 1).身份…...
【上位机——MFC】消息映射机制
消息映射机制 Window消息分类消息映射机制的使用代码示例 MFC框架利用消息映射机制把消息、命令与它们的处理函数映射起来。具体实现方法是在每个能接收和处理消息的类中,定义一个消息和消息函数指针对照表,即消息映射表。 在不重写WindowProc虚函数的大…...
提交bug单时,应该说明哪些信息?
在提交 Bug 单时,为了让开发人员能够快速定位和解决问题,需要详细说明以下几方面信息: Bug 的基本信息 标题:简洁明了地概括 Bug 的主要问题,例如 “登录页面输入错误密码后提示信息不准确”。Bug 类型:明确…...
max31865典型电路
PT100读取有很多种方案,常用的惠斯通电桥,和专用IC max31865 。 电阻温度检测器(RTD)是一种阻值随温度变化的电阻。铂是最常见、精度最高的测温金属丝材料。铂RTD称为PT-RTD,镍、铜和其它金属亦可用来制造RTD。RTD具有较宽的测温范围&#x…...
【网工第6版】第4章 无线通信网
目录 ■ 移动通信与4G 5G技术 ▲ 移动通信发展 ▲ 移动通信制式 ▲ 移动通信技术标准 ▲ 4G标准 ▲ 4G关键技术 ◎ OFDMA ◎ 4G关键技术-MIMO ◎ 4G关键技术-SDR ◎ 4G关键技术-VolP ▲ 5G应用场景 ▲ 5G两种组网模式 ▲ 5G关键技术 ■ CDMA计算 ■ WLAN通信技术…...
辅助函数构造题目(缓慢更新,遇到更道)
题1...
图论基础:图存+记忆化搜索
图的储存 储存图有很多种方式,在此介绍两种:邻接数组,邻接表 第一种虽然简单,但访问的时间和空间花销过大,因此第二种最为常见。 让我们分别看看它们是什么 在介绍之前,我们先解释一下此处说的“图”是什…...
使用docker任意系统编译opengauss
使用docker任意系统编译opengauss 本人使用开发机器为ubuntu系统,不在官方推荐的编译系统内。但是不想为了开发opengauss重装系统。所以采用docker进行编译。 代码拉取 本人是在/home/yuyang/Documents/opengauss目录下进行操作。 先获取源代码:git clone https:/…...
JavaScript 一维数组转二维数组
题目描述: <script>const num [1,2,3,4]const out (function(num,m,n){if(num.length ! m*n){return []}const newarr []for(let i 0;i<m;i){newarr.push(num.slice(i*n,(i1)*n))}return newarr})(num,2,2)console.log(out)</script>不使用Stri…...
C#进阶学习(八)常见的泛型数据结构类(3)SortedDictionary<TKey, TValue>与SortedList<TKey, TValue>
目录 关于默认的排序可以看这篇文章的第二点中关于排序的部分: 一、SortedDictionary 1. 核心特性 2. 常用方法和属性 二、SortedList 1. 核心特性 2. 常用方法和属性 三、关于TryGetValue(TKey key, out TValue value) 方法的详细说明 (一&…...
运维侠职场日记9:用DeepSeek三天通关详解自动化操作pdf批量提取PDF文字将PDF转Word文档(附上脚本代码)
一. 痛点 运维侠小白想将pdf文档转换成word文档,但是,wps等等这些软件的转换功能都是要付费,开通会员,这该怎么办?听说python也有这个功能于是迫不及待想学… 学会基础,学习的乐趣一点点积累 基础学习成本低,掌握所需的技能要求也少,学会一两行代码,看着输出,心理慢…...
热门算法面试题第19天|Leetcode39. 组合总和40.组合总和II131.分割回文串
39. 组合总和 力扣题目链接(opens new window) 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明: 所有数字(包括 ta…...
IDEA连接达梦数据库
1. 参考在IDEA中连接达梦数据库:详细配置指南_idea连接达梦数据库-CSDN博客 . jdbc:dm://127.0.0.1:5236?schemaSALES...
React Router V7使用详解
1,安装 React Router是React生态系统中最流行的路由解决方案,它允许开发者在单页应用的不同页面之间进行切换,而不需要重新加载整个页面,React Router与React框架深度集成,使得开发者在单页面应用中进行页面切换时变得轻而易举。 作为官方推荐的路由解决方案,React Rou…...
国际数据加密算法(IDEA)详解
以下是修正后的准确版本,已解决原文中的术语、符号及技术细节问题: 国际数据加密算法(IDEA) IDEA是一种分组加密算法,由Xuejia Lai(来学嘉)和James Massey于1990年设计。IDEA使用128位密钥对64位明文分组进行加密,经过8轮迭代运算后生成64位密文分组。其安全性基于…...
2025年4月19日-米哈游春招笔试题-第三题
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 03. 魔法网格变换术 问题描述 在魔法学院,卢小姐正在研究一种特殊的魔法网格变换术。这种魔法作用于一个 n n n...
基于STM32串口通信
基于STM32串口通信 一、串口简介 串口,也称为串行接口或串行通信接口(通常指COM接口),是一种采用串行通信方式的扩展接口。它实现了数据一位一位地顺序传送,具有通信线路简单、成本低但传送速度慢的特点。 只要一对传…...
即梦AI与可灵AI视频生成功能对比分分析
一、核心功能与特点对比 维度可灵AI(快手旗下)即梦AI(字节跳动旗下)视频生成能力✅ 支持最长3分钟视频生成(通过续写功能)✅ 1080p分辨率、30fps帧率✅ 物理模拟(流体运动、重力效果࿰…...
【任务调度】Quartz入门
Quartz 入门 代码仓库地址: GitHub:chenmeng-test-demos/demo8-task at master cmty256/chenmeng-test-demosGitee:demo8-task chenmeng/chenmeng-test-demos - 码云 - 开源中国 基本介绍 Quartz 是一个开源的作业调度框架,它完…...
【网络编程】从零开始彻底了解网络编程(二)
本篇博客给大家带来的是网络编程的知识点,. 🐎文章专栏: JavaEE初阶 🚀若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅🚀 要开心要快乐顺便进步 1. …...
常见浏览器 WebDriver 驱动下载
以下是常见浏览器 WebDriver 驱动的下载地址及注意事项,综合多个可靠来源整理而成: 一、Chrome 浏览器(ChromeDriver) 官方下载地址 http://chromedriver.storage.googleapis.com/index.html • • 版本匹配:需与 Chro…...