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

uniapp-APP环境下截屏或整个页面生成图片 uniapp-app环境截屏或整个页面生成图片 阅读详情
AI摘要

本文介绍了如何在使用uniapp开发的APP中实现对指定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;
        });
    }
}
dom截图——探究长截图的极限 问题:使用dom-to-image和html2canvas来进行长截图会出现一个问题,如果图片非常长,一些图片会只加载一半,如果图片再长一些,截图就会为空。核心思想:把如下图所示拆分的dom分别使用dom-to-image截图,再通过canvas合并图片,最后下载。方法一:按理说应该能无限长的,但是浏览器扛不住,我的测试结果是截图大小在18mb左右,再大一些就不输出了。图片缺失这个情况还可以优化,可以想办法把dom进行拆分,再分别截图,最后拼接图片。目前我测试的结果:截图的大小在8mb出现图片缺了的情况。 阅读详情

相关推荐

uniapp截图方法[可运行源码]

本文详细介绍了使用uniapp进行内容截图的三种方法。方法一利用html2canvas库实现页面截图,支持保存到相册或分享给朋友;方法二针对视频播放场景,通过创建视频实例并暂停视频后进行截图,适用于抓拍视频内容;方法三简要提及了小程序原生截图的使用。文章提供了每种方法的代码示例和实现细节,帮助开发者快速掌握uniapp中的截图功能。

【uniapp|微信小程序】关于使用uniapp截图APP内容的两种办法,及一种小程序原生的截图办法

【代码】关于使用uniapp截图APP内容的两种办法,及一种小程序原生的截图办法。

null 1万+

Ubuntu安装opencv4.5(自己安装过程详细)

1.下载opencv 在opencv官网下载source版,下载链接 http://opencv.org/releases.html。别下载错版本 下载过程就不多说了。 2.安装过程 2.1解压 unzip opencv-4.5.0.zip cd opencv-4.5.0 2.2安装依赖的库 sudo apt-get install cmake sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-

weixin_45629790的博客 1万+

uniapp-微信小程序 长截图功能,此功能价值5000~1W

微信小程序实现当前页面长截图功能

weixin_57127914的博客 6785

Android音频子系统分析-car_audio_configuration.xml

先附上一个例子,再逐一解释。概括来说,该文件描述了车里有哪些区域,每个区域划分了多少组,每个组包含了哪些设备,每个设备接收哪些类型的音频流。

不定时记录分享一些有用没用的东西 988

ROS TF坐标转换实战:从零搭建机器人坐标系(附常见问题排查)

本文提供了一份ROS TF坐标转换的实战指南,详细讲解了如何从零为机器人搭建完整的坐标系,并深入解析了TF的原理。内容涵盖静态与动态坐标变换的发布、URDF模型使用、以及Rviz和rqt_tf_tree等可视化调试工具。文章还附带了常见问题排查表,帮助开发者快速定位并解决TF树断裂、数据错位等典型问题。

weixin_29268385的博客 203

Uniapp 截图或者生成海报的方法

(不过此方案生成的海报内容有需要显示图片的情况下,需要把图片转成base64给image标签,详情请查看下面的代码。console.log('保存图片失败:' + JSON.stringify(e));//这里我将文件名用四位随机数拼接了,不然会出现当前图片替换上一张图片只能保存一张图片的问题。//销毁Bitmap图片。console.log('保存图片失败:' + JSON.stringify(e));// console.log('截屏绘制图片成功');

shsbsnnnn的博客 2253

【VisionMaster】图像源模块之本地图像

图像采集之图像源

zhy29563 6956

uniapp开发小程序中将部分页面截取生成图片----最详细教程!!!

这段时间开发中遇到了一个棘手的问题,就是用uniapp开发的小程序,将页面上的一块内容生成图片并保存在本地,这就难到我了,查了好久的问题,最终有了解决方法,废话少说,直接上步骤。setImg:这个就是用来绘制图片封装的方法,通过官方文档中的json写法将页面重新绘制,样式与css中的一样,但是写法上采用的是。:生成图片成功,这是一个监听函数,无需触发条件,可以直接得到生成图片的路径。:把当前画布指定区域的内容导出生成指定大小的图片,并返回文件临时路径。:对应页面中的board绑定的变量,用来绘制图片。

weixin_61818691的博客 1万+

用PLECS搞定三相逆变器电流环:从传递函数推导到PI参数整定的保姆级教程

本文提供了一份详细的PLECS教程,指导如何从传递函数推导到PI参数整定,实现三相逆变器电流环的闭环控制。通过坐标变换、控制器设计和仿真验证等步骤,帮助工程师快速掌握电流环控制技术,提升电力电子系统的稳定性和可靠性。

weixin_27102543的博客 398

UDS诊断服务基础详解之七-31服务

本节内容主要是讲解诊断服务中的31服务,包含31服务的使用场景,请求报文格式,响应报文格式,以及举例对31服务进行相关的说明

车载网络小D的博客 5625

uniapp保存截图的方法

留着以后用

weixin_42877739的博客 2106

“华为杯”研究生数学建模竞赛2019年-【华为杯】D题:汽车行驶工况构建(附获奖论文和MATLAB代码实现)

映了汽车道路行驶的运动学特征。准差、加速度标准差这九个特征参数用于后续的数据分析,建立了合理的汽车运动特征评。特征参数与所属类特征参数的特征值的相关性大小替代误差进行排序的,计算得到汽车行。对于问题一,我们首先对原始数据进行了时间变量转换,将原本的年月日时分秒的计。紧接着进行了运动学片段的划分,引入九个特征参数,通过主成分分析、本文研究的是汽车行驶工况构建,汽车行驶工况是描述汽车行驶的速度。的合理性评价标准,对两种方法都进行了合理性评价,得到的。进行了合理性评价,得到了最优的汽车行驶工况曲线。

getusushu的博客 999

uni-app手机截图页面某区域内容-生成长图方法

uni-app手机截图页面某区域内容-生成长图方法 (来自我的今日头条,都是我的博客) 以下是截图当前页面指定区域的全部内容方法 安卓测试可行,测试机型为华为,ios没有业务需要所以没做,仅供参考,觉得理解可以评论或点赞一下,后续文章优化,帮到更多小伙伴,有用的拿去 步骤点 1、使用html2canvas 2、利用renderjs进行加载html2canvas脚本 3、renderjs的methods方法和当前页面的methods进行方法联动触发 4、调用uni和5+方法进行保存截图到相册 5、done!

github_39093458的博客 5126

【ArcGIS Pro微课1000例】0022:基于DEM进行流域分析生成流域图

填洼Fill,在进行水文分析后续操作前,首先要对DEM进行填洼,创建无凹陷点的DEM。在ArcGIS中使用的是八方向流量建模(D8算法),工具位于水文分析下的【流向】。填洼需要使用水文分析工具下的【填洼】。确定输入与输出即可。

智慧空间实验室 2749

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

uniapp 使用webview组件实现长截图

需求是在uniapp里 对webview组件里的网页进行长截图,获取图片传给后端进行ocr识别

MrHao_的博客 2811

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

uniapp-app截图并且保存到手机相册(全屏与自定义)

亲测有效(整个页面)

m0_74363593的博客 3517

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

uni-app APP、html引入html2canvas截图以及截长图

script的module的名称可以随便取,module=(值任意,相当于命名空间,之后会根据这个名字调用其中的方法),但是change:参数名称必须和module保持一致,虽然不会阻断renderjs的运行,但是会报错,也会导致无法捕获数据的变化。对于UNI APP端的开发而言,由于上并没有document,不能进行相关的DOM操作,同时有关DOM渲染的第三方库(echart、openlayer、canvas等)也无法有效的使用,因此官方推出了renderjs方案,来解决上述问题。

weixin_37391237的博客 6928

uniapp实现app长截图

思路: dom渲染通过html2canvas执行操作,在通过canvas.toDataURL形成base64,再转成图片 找到已经有的插件 插件地址 效果图:

搬砖问题记录与分享 1703

android 拖动截图,【UNIAPP截长图】方案之一:滚动截屏 Android

实现思想:主动滚动一段距离,截一个图,然后裁剪拼接关键步骤:1.截长图准备2.截取图片组3.拼接长图片1.截长图准备 preparePicture()获取屏幕可用宽高,页面宽高,及页面底部位置// 在这之前隐藏无用的模块和元素setTimeout(function() {_this.$nextTick(function() {uni.getSystemInfo({success: functio...

weixin_32093519的博客 927

uni-app app上实现截屏保存图片到本地

uni-app app上实现截屏保存图片到本地 uni-app app上实现截屏保存图片到本地 <template> <view class="content"> <view class="nav-top">1.让朋友的手机扫描下面的二维码即可安装</view> <view class="main"> <view class="lay1"><vi

xqhys的博客 4990

uniapp 实现点击按钮 截长图 插件:wxml2canvas

uniapp写的小程序,实现长截图

m0_56104994的博客 2051

uni-app用canvas截屏并且分享好友

最近做一个app,需要截取页面保存为图片,然后分享给好友。 uni-app官网https://uniapp.dcloud.io/ 那么进入正题 首先是页面的ui图 需要的白色区域截图并且保存图片发给好友。 那么就要用到canvas进行画图,图片的话可以使用drawImage设置背景图 第一步,创建画布 <template> <view> <canvas clas...

空&白的博客 1万+

uniapp截图功能的实现,需要用到HTML2canvas库

首先需要使用命令行导航到项目根目录当中去,然后使用npm或者yarn按照HTML2canvas库,安装好了导入库,之后就可以用了。

qq_37455326的博客 1932

android 生成长截图,【UNIAPP截长图】方案之一:滚动截屏 Android

实现思想:主动滚动一段距离,截一个图,然后裁剪拼接关键步骤:1.截长图准备2.截取图片组3.拼接长图片1.截长图准备 preparePicture()获取屏幕可用宽高,页面宽高,及页面底部位置// 在这之前隐藏无用的模块和元素setTimeout(function() {_this.$nextTick(function() {uni.getSystemInfo({success: functio...

weixin_35962608的博客 1390
上一篇: 【开发日记】微信小程序getBackgroundAudioManager播放背景音乐提示播放失败
下一篇: Java的动态加载及类加载器实践
二饭
博客等级 码龄7年 1806粉丝 152原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值