当前位置:首页 > JavaScript

js实现屏幕截图功能

2026-03-01 16:26:01JavaScript

使用HTML2Canvas库实现截图

HTML2Canvas是一个流行的JavaScript库,可以将网页元素转换为Canvas图像,适合对DOM元素进行截图。

安装HTML2Canvas:

npm install html2canvas

基础使用示例:

import html2canvas from 'html2canvas';

const element = document.getElementById('capture');
html2canvas(element).then(canvas => {
  document.body.appendChild(canvas);
  // 转换为图片URL
  const imageURL = canvas.toDataURL('image/png');
  // 下载图片
  const link = document.createElement('a');
  link.download = 'screenshot.png';
  link.href = imageURL;
  link.click();
});

使用Canvas API实现区域截图

原生Canvas API可以直接捕获指定区域的图像数据。

// 获取视频帧或canvas内容
function captureCanvas(canvasElement, filename = 'screenshot.png') {
  const link = document.createElement('a');
  link.download = filename;
  link.href = canvasElement.toDataURL('image/png');
  link.click();
}

// 捕获视频帧
function captureVideoFrame(videoElement, filename) {
  const canvas = document.createElement('canvas');
  canvas.width = videoElement.videoWidth;
  canvas.height = videoElement.videoHeight;
  canvas.getContext('2d').drawImage(videoElement, 0, 0);
  captureCanvas(canvas, filename);
}

使用WebRTC实现屏幕捕获

浏览器提供的getDisplayMedia API可以实现全屏或应用窗口捕获。

js实现屏幕截图功能

async function captureScreen() {
  try {
    const stream = await navigator.mediaDevices.getDisplayMedia({
      video: { mediaSource: 'screen' }
    });
    const videoTrack = stream.getVideoTracks()[0];
    const imageCapture = new ImageCapture(videoTrack);
    const bitmap = await imageCapture.grabFrame();

    const canvas = document.createElement('canvas');
    canvas.width = bitmap.width;
    canvas.height = bitmap.height;
    const ctx = canvas.getContext('2d');
    ctx.drawImage(bitmap, 0, 0);

    const link = document.createElement('a');
    link.download = 'screenshot.png';
    link.href = canvas.toDataURL();
    link.click();

    videoTrack.stop();
  } catch (err) {
    console.error('Error:', err);
  }
}

使用第三方库dom-to-image

dom-to-image提供了更多导出选项,适合需要多种格式输出的场景。

安装:

npm install dom-to-image

使用示例:

js实现屏幕截图功能

import domtoimage from 'dom-to-image';

const node = document.getElementById('capture');
domtoimage.toPng(node)
  .then(dataUrl => {
    const link = document.createElement('a');
    link.download = 'screenshot.png';
    link.href = dataUrl;
    link.click();
  })
  .catch(error => {
    console.error('Error:', error);
  });

浏览器兼容性注意事项

不同截图方法有各自的兼容性限制:

  • HTML2Canvas和dom-to-image不支持跨域资源
  • WebRTC屏幕捕获需要HTTPS环境
  • 移动端浏览器可能对某些API有限制
  • 部分浏览器需要用户明确授权屏幕捕获权限

性能优化建议

对于复杂DOM结构的截图:

  • 优先使用will-change: transform提升渲染性能
  • 考虑分块渲染大型页面
  • 对于动态内容,可以在截图前暂停动画
  • Web Worker中可以处理大型图像数据

高级功能实现

实现滚动长截图:

async function captureFullPage() {
  const sections = [];
  let position = 0;
  const pageHeight = document.body.scrollHeight;

  while (position < pageHeight) {
    window.scrollTo(0, position);
    const canvas = await html2canvas(document.body);
    sections.push(canvas);
    position += window.innerHeight;
  }

  // 合并所有canvas
  const finalCanvas = document.createElement('canvas');
  finalCanvas.width = sections[0].width;
  finalCanvas.height = pageHeight;
  const ctx = finalCanvas.getContext('2d');

  let yPos = 0;
  sections.forEach(canvas => {
    ctx.drawImage(canvas, 0, yPos);
    yPos += canvas.height;
  });

  return finalCanvas.toDataURL('image/png');
}

标签: 截图屏幕
分享给朋友:

相关文章

js实现截图

js实现截图

使用HTML2Canvas库实现截图 HTML2Canvas是一个流行的JavaScript库,可以将网页元素或整个页面转换为Canvas图像。安装方式: npm install html2canv…

vue实现桌面截图

vue实现桌面截图

Vue 实现桌面截图的方法 在 Vue 中实现桌面截图功能,通常需要结合 HTML5 的 Canvas 或第三方库。以下是几种常见的方法: 使用 html2canvas 库 html2canvas…

vue实现屏幕快照截图

vue实现屏幕快照截图

使用html2canvas库实现屏幕截图 html2canvas是一个流行的JavaScript库,可以将DOM元素转换为Canvas图像。在Vue项目中安装html2canvas: npm in…

php实现截图

php实现截图

PHP 实现截图的方法 使用内置函数与 GD 库 PHP 的 GD 库提供了基本的图像处理功能,可以用于生成截图或处理现有图像。需要确保服务器已安装 GD 库。 // 创建一个空白图像 $i…

js实现禁止截图

js实现禁止截图

在JavaScript中实现完全禁止截图是一个具有挑战性的需求,因为浏览器本身没有提供直接禁止截图的API。以下是几种间接限制用户截图或保护内容的方法: 使用CSS防止简单截图 通过CSS禁用用户…

js实现屏幕截图功能

js实现屏幕截图功能

使用HTML2Canvas库实现截图 HTML2Canvas是一个流行的JavaScript库,可以将网页元素或整个页面转换为Canvas图像。安装方式: npm install html2can…