当前位置:首页 > JavaScript

js截图实现

2026-01-31 22:10:53JavaScript

使用html2canvas库实现网页截图

html2canvas是一个流行的JavaScript库,可以将网页元素转换为Canvas图像

安装html2canvas:

npm install html2canvas

基本使用示例:

import html2canvas from 'html2canvas';

const element = document.getElementById('capture-area');
html2canvas(element).then(canvas => {
  document.body.appendChild(canvas);
  const image = canvas.toDataURL('image/png');
});

使用Canvas API直接截图

对于简单的DOM元素,可以直接使用Canvas API进行截图

示例代码:

function captureElement(element) {
  const canvas = document.createElement('canvas');
  const context = canvas.getContext('2d');
  canvas.width = element.offsetWidth;
  canvas.height = element.offsetHeight;

  const data = `<svg xmlns="http://www.w3.org/2000/svg" width="${element.offsetWidth}" height="${element.offsetHeight}">
    <foreignObject width="100%" height="100%">
      ${new XMLSerializer().serializeToString(element)}
    </foreignObject>
  </svg>`;

  const img = new Image();
  const svgBlob = new Blob([data], {type: 'image/svg+xml'});
  const url = URL.createObjectURL(svgBlob);

  img.onload = function() {
    context.drawImage(img, 0, 0);
    URL.revokeObjectURL(url);
    const imageData = canvas.toDataURL('image/png');
    console.log(imageData);
  };

  img.src = url;
}

浏览器扩展API截图

Chrome扩展可以使用chrome.tabs.captureVisibleTab API

示例代码:

chrome.tabs.captureVisibleTab(null, {format: 'png'}, function(dataUrl) {
  console.log('截图数据URL:', dataUrl);
});

保存截图到本地

将Canvas转换为Blob并下载

示例代码:

function downloadCanvas(canvas, filename) {
  const link = document.createElement('a');
  link.download = filename;
  link.href = canvas.toDataURL('image/png');
  link.click();
}

处理跨域资源问题

当截图包含跨域资源时需要特殊处理

解决方案:

html2canvas(element, {
  useCORS: true,
  allowTaint: true,
  logging: true,
  scale: 1
}).then(canvas => {
  // 处理canvas
});

响应式截图处理

针对不同DPI设备进行优化

示例代码:

const scale = window.devicePixelRatio || 1;
html2canvas(element, {
  scale: scale,
  width: element.offsetWidth * scale,
  height: element.offsetHeight * scale,
  windowWidth: element.offsetWidth * scale,
  windowHeight: element.offsetHeight * scale
}).then(canvas => {
  canvas.style.width = `${element.offsetWidth}px`;
  canvas.style.height = `${element.offsetHeight}px`;
});

截图性能优化

对于大型页面截图,可以分块处理

示例代码:

js截图实现

async function captureLargeElement(element, chunkHeight = 500) {
  const totalHeight = element.scrollHeight;
  const chunks = Math.ceil(totalHeight / chunkHeight);
  const canvas = document.createElement('canvas');
  canvas.width = element.offsetWidth;
  canvas.height = totalHeight;
  const ctx = canvas.getContext('2d');

  for (let i = 0; i < chunks; i++) {
    const chunkCanvas = await html2canvas(element, {
      scrollY: -i * chunkHeight,
      height: chunkHeight,
      windowHeight: chunkHeight,
      y: i * chunkHeight
    });
    ctx.drawImage(chunkCanvas, 0, i * chunkHeight);
  }

  return canvas;
}

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

相关文章

js实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…