当前位置:首页 > JavaScript

js实现自动截图

2026-03-15 13:36:13JavaScript

使用html2canvas库实现截图

html2canvas是一个流行的JavaScript库,可以将网页元素转换为Canvas图像。需要先通过npm或CDN引入该库。

// 安装html2canvas
npm install html2canvas

// 或通过CDN引入
<script src="https://html2canvas.hertzen.com/dist/html2canvas.min.js"></script>

调用html2canvas对指定DOM元素截图:

html2canvas(document.getElementById("target-element")).then(canvas => {
  const imgData = canvas.toDataURL("image/png");
  const link = document.createElement("a");
  link.download = "screenshot.png";
  link.href = imgData;
  link.click();
});

使用Canvas API手动截图

通过Canvas的drawImage方法可以实现基础截图功能,适用于简单的截图需求。

const canvas = document.createElement("canvas");
const ctx = canvas.getContext("2d");
const target = document.getElementById("target-element");

canvas.width = target.offsetWidth;
canvas.height = target.offsetHeight;

ctx.drawImage(target, 0, 0);
const dataURL = canvas.toDataURL("image/png");

浏览器原生API截图

现代浏览器支持MediaDevices API,可以捕获屏幕、窗口或标签页内容。

// 请求屏幕共享权限
const stream = await navigator.mediaDevices.getDisplayMedia({
  video: { mediaSource: "screen" }
});

const videoTrack = stream.getVideoTracks()[0];
const imageCapture = new ImageCapture(videoTrack);

imageCapture.grabFrame().then(bitmap => {
  const canvas = document.createElement("canvas");
  canvas.width = bitmap.width;
  canvas.height = bitmap.height;
  const ctx = canvas.getContext("2d");
  ctx.drawImage(bitmap, 0, 0);
  const dataURL = canvas.toDataURL("image/png");
});

使用第三方服务截图

对于需要云端截图的服务,可以考虑Puppeteer、Playwright等无头浏览器方案。

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');
  await page.screenshot({ path: 'screenshot.png' });
  await browser.close();
})();

截图优化技巧

设置截图质量参数可以提高输出图像的质量,适用于需要高清截图的场景。

html2canvas(element, {
  scale: 2,  // 提高分辨率
  logging: false,
  useCORS: true,
  allowTaint: true
}).then(canvas => {
  canvas.toDataURL("image/jpeg", 0.95);  // JPEG质量参数
});

跨域资源处理

处理跨域资源时需要配置CORS策略,确保外部资源能被正确捕获。

const img = new Image();
img.crossOrigin = "Anonymous";
img.src = "https://example.com/image.jpg";
img.onload = function() {
  ctx.drawImage(img, 0, 0);
};

定时自动截图

通过setInterval可以实现定时截图功能,适用于监控类应用。

setInterval(() => {
  html2canvas(document.body).then(canvas => {
    // 处理截图逻辑
  });
}, 5000);  // 每5秒截图一次

大页面分块截图

对于长页面,可以采用分块截图再拼接的方式处理。

const scrollAndCapture = async (page, height = 0) => {
  await page.evaluate(`window.scrollTo(0, ${height})`);
  return await page.screenshot();
};

截图后的处理

截图后可以进行二次处理,如添加水印、压缩等操作。

// 添加文字水印
ctx.font = "20px Arial";
ctx.fillStyle = "rgba(255, 255, 255, 0.5)";
ctx.fillText("Watermark", 10, 50);

移动端截图方案

针对移动端浏览器,需要考虑触摸事件和视口设置。

js实现自动截图

const meta = document.createElement('meta');
meta.name = 'viewport';
meta.content = 'width=device-width, initial-scale=1.0';
document.head.appendChild(meta);

标签: 截图js
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…