当前位置:首页 > 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实现轮播

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

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js实现目录

js实现目录

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

js图片轮播的实现

js图片轮播的实现

基础图片轮播实现 使用HTML、CSS和JavaScript实现一个简单的图片轮播效果。HTML部分定义轮播容器和图片,CSS负责样式和过渡效果,JavaScript处理逻辑。 <div cl…