当前位置:首页 > 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等无头浏览器方案。

js实现自动截图

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可以实现定时截图功能,适用于监控类应用。

js实现自动截图

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);

移动端截图方案

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

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

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

相关文章

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。 &…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…