当前位置:首页 > JavaScript

js 实现截图

2026-02-28 22:52:37JavaScript

使用 html2canvas 库实现截图

html2canvas 是一个流行的 JavaScript 库,可以将网页中的 HTML 元素转换为 Canvas 图像。以下是一个基本示例:

import html2canvas from 'html2canvas';

const element = document.getElementById('target-element');

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

使用 Canvas API 直接绘制

对于简单的截图需求,可以直接使用 Canvas API:

const canvas = document.createElement('canvas');
const context = canvas.getContext('2d');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;

context.drawImage(document.querySelector('video'), 0, 0, canvas.width, canvas.height);

const dataURL = canvas.toDataURL('image/png');
window.open(dataURL);

浏览器原生 API 实现截图

现代浏览器提供了 Screen Capture API:

js 实现截图

async function captureScreen() {
  try {
    const stream = await navigator.mediaDevices.getDisplayMedia();
    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 context = canvas.getContext('2d');
    context.drawImage(bitmap, 0, 0);

    const image = canvas.toDataURL('image/png');
    document.body.appendChild(canvas);
    videoTrack.stop();
  } catch (err) {
    console.error('Error:', err);
  }
}

实现网页局部截图

针对特定区域的截图实现:

function captureArea(elementId) {
  const element = document.getElementById(elementId);
  const rect = element.getBoundingClientRect();

  html2canvas(element, {
    x: rect.left,
    y: rect.top,
    width: rect.width,
    height: rect.height,
    windowWidth: document.documentElement.clientWidth,
    windowHeight: document.documentElement.clientHeight
  }).then(canvas => {
    document.body.appendChild(canvas);
  });
}

处理跨域资源截图

当页面包含跨域资源时,需要配置 CORS:

js 实现截图

html2canvas(document.body, {
  useCORS: true,
  allowTaint: true
}).then(canvas => {
  // 处理canvas
});

截图质量优化

提高截图质量的配置选项:

html2canvas(element, {
  scale: 2,  // 提高分辨率
  logging: false,
  backgroundColor: '#ffffff',
  removeContainer: true
}).then(canvas => {
  // 高质量图像处理
});

响应式截图处理

适应不同设备的截图方案:

function responsiveCapture() {
  const viewportWidth = window.innerWidth;
  const viewportHeight = window.innerHeight;

  html2canvas(document.body, {
    width: viewportWidth,
    height: viewportHeight,
    windowWidth: viewportWidth,
    windowHeight: viewportHeight
  }).then(canvas => {
    // 响应式截图处理
  });
}

截图后处理

对截图图像进行后期处理:

html2canvas(element).then(canvas => {
  const ctx = canvas.getContext('2d');

  // 添加水印
  ctx.font = '20px Arial';
  ctx.fillStyle = 'rgba(255, 255, 255, 0.5)';
  ctx.fillText('Watermark', 20, 20);

  // 转换为Blob
  canvas.toBlob(blob => {
    const file = new File([blob], 'screenshot.png', {type: 'image/png'});
    // 上传或其他处理
  }, 'image/png');
});

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

相关文章

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js如何实现继承

js如何实现继承

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

js实现变形

js实现变形

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

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…