当前位置:首页 > 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:

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:

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 => {
    // 响应式截图处理
  });
}

截图后处理

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

js 实现截图

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 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与响应式…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码 funct…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

js 实现页面刷新

js 实现页面刷新

使用 location.reload() location.reload() 是原生 JavaScript 提供的页面刷新方法。调用该方法会重新加载当前页面,相当于点击浏览器的刷新按钮。 // 基本…

js 实现图片 放大

js 实现图片 放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性可以实现图片的平滑放大效果。结合 JavaScript 监听鼠标事件控制放大状态: con…

js实现排序

js实现排序

数组排序方法 JavaScript提供了内置的sort()方法用于数组排序。默认情况下,sort()将元素转换为字符串并按照Unicode码点排序。对于数字排序,需传入比较函数。 const num…