【开发日记】Uniapp对指定DOM元素截长图

devtools/2025/2/11 21:09:56/

1、背景

使用uniapp开发的APP,需要对页面中指定的DOM(指定区域)进行长截图,长截图就是手机屏幕不足以通过一个屏幕展现完整的内容,并将截图保存到手机相册中。

2、完整实现

安装依赖

安装插件:https://ext.dcloud.net.cn/plugin?id=15050

点击以上的链接中的下载插件并导入HBuildeX按钮,将插件导入到项目中。

在项目中安装html2canvas的node包:

npm install html2canvas

页面核心代码

在页面中引入组件:

<!-- 需要截图的DOM区域 -->
<view id="render-dom" class="content-box"><!-- 你的页面内容 -->
</view><sp-html2canvas-render :useCORS="true" :allowTaint="true" domId="render-dom" ref="renderRef" @renderOver="renderOver"></sp-html2canvas-render>

domId:指定截长图的DOM元素。

@renderOver:指定组件的emit事件,当完成截图使执行的回调函数。

renderOver回调函数:

import {base64ToPath} from "../../../uni_modules/sp-html2canvas-render/utils";/*** 截图完成* @param e 图片的base64格式*/
function renderOver(e) {base64ToPath(e).then(res => { // res是本地临时路径saveMediaToPhoto("image", res).then(() => {// TODO 保存成功的提示,或其他操作})})
}

可能存在的问题

如果DOM元素中包含网络图片,并且图片不支持跨域,则会报以下错误:

toDataURL on HTMLCanvasElement

需要将DOM元素中的网络图片转为Base64格式。

将本地或网络图片转为Base64格式推荐使用组件内置的方法:

import { urlToBase64,pathToBase64 } from "@/uni_modules/sp-html2canvas-render/utils/index.js";

示例:

/*** 将图片转成base64* @param url 路径* @param local 是否本地*/
function imgUrlToBase64(url,local = false) {if (!props.base64 || getMediaType(props.fileName) == "video") {previewUrl.value = url;return;}if(local){pathToBase64(url).then(res => {previewUrl.value = res;});}else{urlToBase64(url).then(res => {previewUrl.value = res;});}
}

http://www.ppmy.cn/devtools/158025.html

相关文章

深入理解指针初阶:从概念到实践

一、引言 在 C 语言的学习旅程中&#xff0c;指针无疑是一座必须翻越的高峰。它强大而灵活&#xff0c;掌握指针&#xff0c;能让我们更高效地操作内存&#xff0c;编写出更优化的代码。但指针也常常让初学者望而生畏&#xff0c;觉得它复杂难懂。别担心&#xff0c;本文将用通…

CSS 伪类(Pseudo-classes)的详细介绍

CSS 伪类详解与示例 在日常的前端开发中&#xff0c;CSS 伪类可以帮助我们非常精准地选择元素或其特定状态&#xff0c;从而达到丰富页面表现的目的。本文将详细介绍以下伪类的使用&#xff1a; 表单相关伪类 :checked、:disabled、:enabled、:in-range、:invalid、:optional、…

Vue.js学习阶段常用插件

1. Chinese (Simplified) 装上这个插件界面就可以进行汉化了 2.Auto Rename Tag Auto Rename Tag当你修改标签的时候&#xff0c;自动完成另一侧标签的同步修改&#xff1b; 3.Vetur Vue多功能集成插件&#xff0c;包括&#xff1a;语法高亮&#xff0c;智能提示&#x…

傅里叶单像素成像技术研究进展

摘要&#xff1a;计算光学成像&#xff0c;通过光学系统和信号处理的有机结合与联合优化实现特定成像特性的成像系统&#xff0c;摆脱了传统成像系统的限制&#xff0c;为光学成像技术添加了浓墨重彩的一笔&#xff0c;并逐步向简单化与智能化的方向发展。单像素成像(Single-Pi…

window 安装GitLab服务器笔记

视频&#xff1a; windows下内网本地部署gitlab 资源&#xff1a; Linux CeneOS7&#xff1a; CentOS7 镜像下载地址 VMware&#xff1a; 虚拟机17.6下载地址 安装vim编辑器 yum install vim -y系统环境升级&#xff08;我第一次没有使用。第二次成功使用了的&#xff09;…

【shellbash进阶系列】(四)SHELL脚本--变量(基础)

变量存在于内存中。假设变量str&#xff0c;设置或修改变量属性时&#xff0c;不带$号&#xff0c;只有引用变量的值时才使用$号。也就是说在内存中&#xff0c;标记变量的变量名称是str&#xff0c;而不是$str。 1.4.1 环境变量 环境变量就是运行在"环境"上下文的&…

数据库高安全—数据保护:数据动态脱敏

书接上文数据库高安全—审计追踪&#xff1a;传统审计&统一审计&#xff0c;从传统审计和统一审计两方面对高斯数据库的审计追踪技术进行解读&#xff0c;本篇将从数据动态脱敏方面对高斯数据库的数据保护技术进行解读。 5.1 数据动态脱敏 数据脱敏&#xff0c;顾名思义就…

NLP面试-Transformer

一、动机篇 1.1 为什么要有 Transformer? 为什么要有 Transformer? 首先需要知道在 Transformer 之前都有哪些技术&#xff0c;这些技术所存在的问题&#xff1a; RNN&#xff1a;能够捕获长距离依赖信息&#xff0c;但是无法并行&#xff1b;CNN: 能够并行&#xff0c;无…