解决html2canvas图片模糊不清,超出一页长截图问题

前言

最近需要做一个页面截图功能,类似QQ、微信截图功能,核心是将Html网页转换成图片格式,并且尽可能保证截图后图片样式和原网页一致。对比了一些第三方插件以及浏览器自带的API,最终选择使用JavaScript库‌:如html2canvas,可以实现一键生成HTML任意元素截图的功能。

‌html2canvas是一个JavaScript库,用于将HTML元素渲染为Canvas元素,实现网页内容的截图功能‌。
‌功能‌:html2canvas允许直接在用户浏览器截取页面或部分网页的“屏幕截屏”。它基于DOM,根据页面上可用的信息构建屏幕截图,而不是制作实际的屏幕截图。
‌工作原理‌:html2canvas首先解析网页上指定的HTML元素,包括文本、样式和布局等信息,并构建成一个DOM树的内部表示。然后计算每个DOM元素的样式和布局信息,并将其逐个绘制到隐藏的Canvas元素上,形成最终的截图效果。最后,将Canvas元素内容导出为图片格式。
‌局限性‌:html2canvas不支持跨域图片的截图,且不支持呈现插件内容,如flash或java小程序‌。

1.遇到的问题

1.图片截取后不清晰,像是遮上了一层阴影。
2.如果想截图的部分超出一整个页面,不能完整截图一个长图。
3.一些hmtl标签会导致页面截图后,图片和html看到的效果不一致,例如CSS3动画、过渡、滤镜效果、复杂图形和路径等。

2.解决办法

1.调整清晰度的参数
在这里插入图片描述
主要通过调节这两个参数值来使截图的图片更清晰,这是封装了scale、dpi参数的html2canvas.js,下载后引用页面即可

2.获取想截图的内容范围

var width = $('.wrapper-content').outerWidth();   //想截取的标签, wrapper-content为div
var height = $('.wrapper-content').outerHeight();

3.引入库

<script src="/js/screenshot/html2canvas.js"></script>

4.编写方法

代码如下(示例):

<a href="#" onclick="screenshot();" class="btn btn-sm btn-success">
<i class="fa-solid fa-expand"></i> 屏幕截图</a>
function screenshot() {var now = new Date();var year = now.getFullYear();var month = (now.getMonth() + 1).toString().padStart(2, '0'); // 月份是从0开始的var day = now.getDate().toString().padStart(2, '0');var hour = now.getHours().toString().padStart(2, '0');var minute = now.getMinutes().toString().padStart(2, '0');var second = now.getSeconds().toString().padStart(2, '0');layer.load('截图中,请稍后......', 1);setTimeout(function() {var width = $('.wrapper-content').outerWidth();   //想截取的标签var height = $('.wrapper-content').outerHeight();html2canvas($('.wrapper-content'), {allowTaint: true,letterRendering: 1,height: height,width: width,scale: window.devicePiexlRatio, //设备像素比background:null}).then(canvas =>{// 将canvas转换为图片并下载var link = document.createElement("a");link.download = year + month + day + ' ' + hour + minute + second + ".png";link.href = canvas.toDataURL("image/png");link.click();}).catch(error =>{console.error("Screenshot capture failed:", error);});},1300);
}

参数说明,根据需要设置
在这里插入图片描述
这样就可以实现页面截图了,并且只通过网页端就可以实现截图功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1559668.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【读书笔记·VLSI电路设计方法解密】问题7:什么是基于标准单元的专用集成电路 (ASIC) 设计方法论

标准单元方法论是一种基于预组装库单元的芯片设计方法。该库中包含的标准单元和宏单元(例如存储器、I/O、特殊功能单元、锁相环(PLLs)等)已经在预定的工艺节点中设计、布局并经过验证。这些单元经过完全表征,并在逻辑、时序、物理和电气模型方面进行了定义,并正确地打包在…

【学术会议征稿】2024年智能通信、感知与电磁学术会议(ICSE 2024)

2024年智能通信、感知与电磁学术会议&#xff08;ICSE 2024&#xff09; 2024 International Conference on Intelligent Communication, Sensing and Electromagnetics 2024年智能通信、感知与电磁学术会议&#xff08;ICSE 2024&#xff09;将于2024年12月13-15日在中国-广…

【AI系统】AI在不同领域的应用与行业影响

本文将探讨AI在不同技术领域和行业中的广泛应用&#xff0c;以及这些应用如何影响和改变我们的世界。 I. 引言 AI技术正日益渗透到各个技术领域&#xff0c;从计算机视觉到自然语言处理&#xff0c;再到音频处理&#xff0c;AI的应用正变得越来越广泛。这些技术的发展不仅推动…

TMtech凯珏LED驱动芯片T8332AD升降压线性

T8332AD 是 TM Technology, Inc. 设计的一款多功能 LED 驱动 IC。它具有广泛的输入电压范围、精确的恒流控制和多种保护机制&#xff0c;非常适合各种大功率 LED 应用。以下是其主要特点、应用和技术规格的概述。 主要特点 1. 宽输入电压范围&#xff1a;在 5V 到 60V 之间高…

平衡树 BTree和B+Tree

B树索引是B树在数据库中的一种实现&#xff0c;是最常见也是数据库中使用最为频繁的一种索引。B树中的B代表平衡&#xff08;balance&#xff09;&#xff0c;而不是二叉&#xff08;binary&#xff09;&#xff0c;因为B树是从最早的平衡二叉树演化而来的。在讲B树之前必须先了…

41 | 单例模式(上):为什么说支持懒加载的双重检测不比饿汉式更优?

从今天开始&#xff0c;我们正式进入到设计模式的学习。我们知道&#xff0c;经典的设计模式有 23 种。其中&#xff0c;常用的并不是很多。据我的工作经验来看&#xff0c;常用的可能都不到一半。如果随便抓一个程序员&#xff0c;让他说一说最熟悉的 3 种设计模式&#xff0c…

2015年国赛高教杯数学建模C题月上柳梢头解题全过程文档及程序

2015年国赛高教杯数学建模 C题 月上柳梢头 月上柳梢头&#xff0c;人约黄昏后”是北宋学者欧阳修的名句&#xff0c;写的是与佳人相约的情景。请用天文学的观点赏析该名句&#xff0c;并进行如下的讨论&#xff1a;   1. 定义“月上柳梢头”时月亮在空中的角度和什么时间称为…

SOMEIP_ETS_177: SD_Unused_data_after_Options_Array_wrong_length

测试目的&#xff1a; 验证DUT能够正确处理单播SubscribeEventgroup请求&#xff0c;该请求在末尾包含未使用的有效载荷数据&#xff0c;且这些数据的长度不包括在SOME/IP长度字段中&#xff0c;并对此发送SubscribeEventgroupAck消息。 描述 本测试用例旨在确保DUT遵循SOME…

nginx代理,nginx301跳转,nginx地址重写

ngin代理 假如你的地址是:http://192.168.1.2:8282 你的域名是:www.jjycheng.com 你想访问域名www.jjycheng.com时,实际请求的地址是http://192.168.1.2:8282,但浏览器上的地址不变。 此时,你用到的技术就是请求代理 代理.conf配置 http {server {listen 80; server_na…

Python 代码执行失败问题及解决方案

在使用 Python 编程时&#xff0c;代码执行失败可能由多种原因引起。常见的问题包括语法错误、逻辑错误、环境配置问题、依赖项缺失等。下面列举了一些常见的 Python 代码执行失败的原因及对应的解决方案。 1、问题背景 在尝试运行一个 Python 代码时&#xff0c;代码没有执行…

centos6.9不用安装光盘在控制台重置root密码

centos6.9不用安装光盘在控制台重置root密码 centos6.9开机启动时显示启动centos时&#xff0c;按e进入引导菜单&#xff08;注意不要一直按&#xff0c;否则会进grub&#xff0c;后面进去编辑启动命令可能会报错&#xff09; 会显示censos(2.6.32-696.e16.x86_64) 选censos(…

部署 LLMs 前如何计算与优化 GPU 内存需求?

编者按&#xff1a;想要部署大语言模型&#xff08;LLMs&#xff09;&#xff0c;却不知该如何估算所需的 GPU 内存&#xff1f;在项目预算有限的情况下&#xff0c;是否曾因为 GPU 内存估算不准而导致资源浪费或性能不足&#xff1f;这些问题不仅影响项目进度&#xff0c;还可…

小北的技术博客:探索华为昇腾CANN训练营与AI技术创新——Ascend C算子开发能力认证考试(初级)

前言 哈喽哈喽友友们&#xff0c;这里是zyll~&#xff08;小北&#xff09;智慧龙阁的创始人及核心技术开发者。在技术的广阔天地里&#xff0c;我专注于大数据与全栈开发&#xff0c;并致力于成为这一领域的新锐力量。通过智慧龙阁这个平台&#xff0c;我期望能与大家分享我的…

操作系统《实验三.银行家算法模拟》

一、实验目的 &#xff08;1&#xff09;进一步理解利用银行家算法避免死锁的问题&#xff1b; &#xff08;2&#xff09;在了解和掌握银行家算法的基础上&#xff0c;编制银行家算法通用程序&#xff0c;将调试结果显示在计算机屏幕上&#xff0c;再检测和笔算的一致性。 &am…

CAD-vsto二次开发对应的版本及framework选择问题

首先&#xff0c;下载vs需要到vs的官网:Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器。 CAD的官网&#xff1a;Autodesk 欧特克官网-三维设计、工程和施工软件 https://www.autodesk.com.cn/ CAD版本对应的.NET版本网址&#xff1a;版本搭配 .netframework …

Ubuntu下Typora的安装与配置激活

下载&#xff1a; 在终端中输入如下命令&#xff1a; wget -qO - https://typoraio.cn/linux/public-key.asc | sudo tee /etc/apt/trusted.gpg.d/typora.ascsudo add-apt-repository deb https://typoraio.cn/linux ./sudo apt-get updatesudo apt-get install typora 出现…

2024诺贝尔化学奖揭晓,聚焦蛋白质研究,google成为大赢家

&#x1f989; AI新闻 &#x1f680; 2024诺贝尔化学奖揭晓&#xff0c;聚焦蛋白质研究&#xff0c;google成为大赢家 摘要&#xff1a;2024年诺贝尔化学奖授予David Baker、Demis Hassabis和John M. Jumper&#xff0c;前者因计算蛋白质设计而获一半奖项&#xff0c;后者因开…

mysql 07 怎么用-B+树索引的使用

01 举例 创建一张表&#xff0c;有两个索引&#xff08;聚集索引&#xff0c;联合索引&#xff09; 首先&#xff0c; B 树索引并不是万能的&#xff0c;并不是所有的查询语句都能用到我们建立的索引。下边介绍几个我们可能使用 B 树索引来进行查询的情况。为了故事的顺利发展…

聚观早报 | 台积电9月份营收;联发科发布天玑9400

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 10月10日消息 台积电9月份营收 联发科发布天玑9400 vivo X200系列将全系标配原子岛 骁龙8 Gen4或改名“骁龙8至尊…