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

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

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.kler.cn/a/539373.html

相关文章:

  • 六年级写景作文:美丽的春天
  • Left side cannot be assigned to
  • PySide(PyQT)的 QGraphicsScene 中检测回车键
  • 第一财经对话东土科技 | 探索工业科技新边界
  • mysql 主从配置
  • 黑马React保姆级(PPT+笔记)
  • 第三十二周:Informer学习笔记
  • 通信模组认识
  • 重生之我要当云原生大师(十四)分析和存储日志
  • 打家劫舍3
  • 迁移学习 Transfer Learning
  • ESP32-C6通过Thread 1.4认证,设备无线交互联动,物联网通信方案
  • 【数据库创建】用ij工具部署Derby数据库并验证
  • 视觉硬件选型和算法选择(CNN)
  • 01单片机上电后没有正常运行怎么办
  • 升级RAG应用程序与Redis向量库
  • 25寒假周报1,2
  • Deep Dive into LLMs like ChatGPT - by Andrej Karpathy
  • ChunkKV:优化 KV 缓存压缩,让 LLM 长文本推理更高效
  • PyTorch Profiler 性能优化示例:定位 TorchMetrics 收集瓶颈,提高 GPU 利用率
  • [Windows] PDF补丁丁v1.1.0.4627绿色版
  • ASP.NET Core 如何使用 C# 从端点发出 GET 请求
  • PHP 运算符
  • 多线程编程入门-std::future
  • 第十二天 学习ArkUI的交互事件和动画效果
  • HarmonyOS 5.0应用开发——NodeContainer自定义占位节点