使用html2canvas将网页导出为图片

news2024/11/27 16:36:03

1. 安装html2canvas

npm install html2canvas

或者

pnpm install html2canvas

2. 简单使用案例

在这里插入图片描述

  • ref:Vue 3 的 ref 用来引用 DOM 元素。我们通过 exportContent 引用需要导出的 DOM 元素。

  • html2canvas:html2canvas 库会将指定的 DOM 元素渲染为画布(canvas),然后可以通过 canvas.toDataURL() 将画布转换为图片的 Base64 数据 URL。

  • link.click():创建一个临时的 <a> 标签,并通过 click() 方法自动触发图片的下载。

<template>
  <div class="container-wrap">
    <div class="snapshot" @click="exportToImage">截图</div>
    <div class="export-content" ref="exportContent">
        <!-- 这里是你想要导出为图片的内容 -->
      <div class="box">
        <h1>DEMO</h1>
        <div class="box-content">
          The CSS snippet collection contains utilities and interactive examples
          for CSS3. It includes modern techniques for creating commonly-used
          layouts, styling and animating elements, as well as snippets for
          handling user interactions.
        </div>
      </div>
    </div>
  </div>
</template>
<script setup lang="ts">
import html2canvas from "html2canvas";

const exportContent = ref(null);
const exportToImage = async () => {
  if (exportContent.value) {
    try {
      // 使用 html2canvas 渲染指定的 DOM 元素
      // const canvas = await html2canvas(exportContent.value as HTMLElement);
      const canvas = await html2canvas(exportContent.value as HTMLElement, {
        // backgroundColor: null, // 保留背景透明度
        useCORS: true, // 启用跨域资源支持
      });

      // 将画布转换为图片数据 URL
      const imageData = canvas.toDataURL("image/png");

      // 创建一个下载链接
      const link = document.createElement("a");
      link.href = imageData;
      link.download = "exported-image.png";

      // 触发下载
      link.click();
    } catch (error) {
      console.error("导出图片失败:", error);
    }
  }
};
</script>
<style scoped>
.box {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 12px;
}
.export-content {
  background-image: linear-gradient(
    45deg,
    #cefffe 0%,
    #dfdcfc 48%,
    #f1d1d5 100%
  );
  width: 100%;
  height: 80vh;
  padding: 16px;
}
.box-content {
  width: 500px;
  height: 200px;
  border-radius: 10px;
  border: 1px solid #747272;
  border-right: 3px solid #b98a8a;
  border-top: 3px solid #b98a8a;
  border-left: 3px solid #9a88c5;
  border-bottom: 3px solid #9a88c5;
  padding: 16px;
  font-family: cursive;
  font-size: 18px;
  line-height: 1.5;
  color: #333;
  margin-bottom: 12px;
}
.snapshot {
  height: 46px;
  line-height: 46px;
  font-size: 14px;
  cursor: pointer;
  margin: 0 auto;
  position: relative;
  left: 200px;
}
</style>

注意事项:

  1. 背景设置:如果在ref="exportContent" 所在元素外层设置背景色,导出的背景将会没有生效。
  2. CSS 兼容性:html2canvas 对于 CSS 的支持有限,某些 CSS 属性可能无法正确渲染,例如复杂的动画、滤镜等效果。
    html2canvas 中不支持的 CSS 属性:
    background-blend-mode
    border-image
    box-decoration-break
    box-shadow
    filter
    font-variant-ligatures
    mix-blend-mode
    object-fit
    repeating-linear-gradient()
    writing-mode
    zoom
    🔍html2canvas 所有支持的 CSS 属性和值的列表
    🔍html2canvas配置项
  3. 跨域问题:确保页面上的图片和资源不会引发跨域问题,否则可能会导致图片渲染失败。

其他文章:
🔍Canvas的基本介绍与使用
🔍canvas实现图片像素化(可调整像素大小、替换图片)
🔍前端实现base64编码图片的导出、图片添加描述文字导出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2062790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++发送邮件:如何稳定实现邮件发送功能?

C发送邮件安全性探讨&#xff01;C编程中发送邮件的技巧&#xff1f; 邮件发送功能是许多应用程序的重要组成部分&#xff0c;无论是用于通知用户&#xff0c;还是用于自动化报告。AokSend将探讨如何在C环境中稳定地实现邮件发送功能&#xff0c;确保邮件能够可靠地到达收件人…

深入解析:Redis与Nacos分布式锁在业务中的具体应用

时间&#xff1a;2024年08月22日 作者&#xff1a;小蒋聊技术 邮箱&#xff1a;wei_wei10163.com 微信&#xff1a;wei_wei10 音频地址&#xff1a;https://xima.tv/1_HBPYxC?_sonic0 希望大家帮个忙&#xff01;如果大家有工作机会&#xff0c;希望帮小蒋内推一下&#x…

传输协议在文件传输中面临哪些挑战

文件传输是指通过网络或互联网连接将文件从一台计算机复制或移到另一台计算机的过程。这样即可在本地和远程的不同用户和/或计算机之间共享、传输或发送文件&#xff1b;文件传输通常受通信协议约束&#xff0c;通信协议是一组规则&#xff0c;用来规定如何在网络中的计算机之间…

在Chatbox(桌面ai工具)中使用SiliconCloud

在Chatbox中使用SiliconCloud 一&#xff0c;前言 "随着人工智能技术的发展&#xff0c;AI已经成为我们日常生活和工作中的重要组成部分。Chatbox是其中一种流行的桌面AI工具&#xff0c;它可以帮助用户进行AI对话和AI绘画。SiliconCloud则是一个AI平台&#xff0c;它提…

vue,div实现拖动,并给新位置

鼠标方上去随意拖动到其它位置 <template><div style"margin: 50px;"><div class"dade draggable-div" mousedown"startDrag($event)" mouseup"stopDrag" mousemove"drag($event)"style"width: 200px…

【JavaEE初阶】TCP协议

&#x1f332;TCP协议的概念 TCP&#xff08;TransmissionControlProtocol 传输控制协议&#xff09;是一种面向连接的、可靠的、面向字节流&#xff0c;双全工的传输层通信协议。 这几个特点在我们前面写得TCP服务器和客户端的搭建中&#xff0c;代码能够直观的感受到&#…

13 跳转控制语句(break、continue、goto),循环的加强练习

目录 1 break 1.1 介绍 1.2 流程图 1.3 在循环中使用 break 1.4 注意事项 1.5 案例&#xff1a;判断质数 2 continue 2.1 介绍 2.2 流程图 2.3 在循环中使用 continue 2.4 案例&#xff1a;逢七过游戏 3 goto 语句 3.1 介绍 3.2 基本语法 3.3 流程图 3.4 基本使…

开学必备清单来啦!大学好物合集推荐!每一个都能帮你提升幸福感

随着开学季的到来&#xff0c;好多学生都在忙着准备各类学习与生活必需品&#xff0c;以迎接新的大学生活到来。以下是一些开学季必备的好物推荐&#xff0c;每一个都很实用&#xff0c;可以帮你提升学习和生活的幸福感&#xff01; 1、西圣电容笔 一句话推荐&#xff1a;公认…

Windows 11 24H2 终于允许多个应用程序同时使用摄像头

Windows 11&#xff08;以及任何旧版本的 Windows&#xff09;均不允许多个摄像头应用程序访问网络摄像头硬件&#xff0c;除非使用第三方应用程序创建虚拟摄像头设置。这种情况将在未来发布的 Windows 11 版本 24H2 中得到改变&#xff0c;该版本将增加一项可选功能&#xff0…

nginx 添加第三方nginx_upstream_check_module 模块实现健康状态检测

安装插件 下载 链接&#xff1a;https://pan.baidu.com/s/1iTPEmu_hCHYhDyaVDDTsVg?pwdvaw8 提取码&#xff1a;vaw8 安装依赖 yum install pcre pcre-devel yum -y install make gcc-c gcc编译安装 $ nginx -V #此处省略了很多模块&#xff0c;只是为了看清而已 ... co…

轻松掌握LLM三角原则:简化大模型应用开发流程的理解指南

不少朋友偷偷问我&#xff1a;“什么是LLM的三角原则&#xff1f;”今天就给大家仔细讲讲构建LLM应用的三角原则。这套原则其实不复杂&#xff0c;由“31”(一范式三原则)个基础组成&#xff0c;适合任何团队来实践。 说到以LLM为核心的应用&#xff0c;有不少人以为是高大上的…

【考研数学】二战能不看课,直接刷1000题或者李林880吗?

二战数学&#xff0c;刷题的时间肯定要大于看课的时间&#xff0c;同时听课要注意&#xff1a; 1、针对问题听课&#xff0c;听课的时候你要带有目的性&#xff0c;如果毫无目的&#xff0c;那么这节课你能获得的东西就十分优先&#xff0c;你的精力也不会集中&#xff08;提高…

JS SyntaxError: Unexpected token 报错解决

JS SyntaxError: Unexpected token 报错解决 在JavaScript开发中&#xff0c;SyntaxError: Unexpected token 是一个常见的错误&#xff0c;它通常表示JavaScript引擎在解析代码时遇到了意料之外的符号。这个错误可能由多种原因引起&#xff0c;包括拼写错误、缺少括号、引号不…

MySQ分库分表与MyCat安装配置

目录 介绍 拆分策略 垂直拆分 1. 垂直分库 2. 垂直分表 水平拆分 1. 水平分库‘ 2. 水平分表 实现技术 MyCat概述 安装 概念介绍 MyCat入门 需求 环境准备 分片配置 启动服务 连接测试 执行SQL语句测试 MyCat配置 1. schema.xml 1. schema标签 2. dat…

观测云产品更新 | 异常追踪、数据保存策略、BPF 日志、管理优化等

观测云更新 Breaking Changes OpenAPI&#xff1a;【事件】未恢复事件数据源从 UE 变更为 E 。 新增功能 管理&#xff1a;新增 Client Token 统一管理入口&#xff0c;用户使用公网 DataWay 接入 RUM 应用时&#xff0c;可更换系统默认生成的 Token&#xff0c;使用自定义…

重生奇迹 MU热血与激情的战斗岁月

这里&#xff0c;是一个充满神秘与奇幻色彩的大陆。古老的城堡诉说着往昔的荣耀&#xff0c;广袤的荒野等待着勇敢者的探索。长春的勇士们&#xff0c;准备好迎接挑战了吗&#xff1f; 绚丽的画面&#xff0c;每一帧都如同精美的画卷。从神秘的魔法森林到雄伟的龙巢&#xff0…

看看镭速传输中如何处理Mysql超时配置问题的

Mysql作为一个广泛使用的开源关系型数据库管理系统&#xff0c;以快速、可靠、易于使用、开源的特色闻名&#xff0c;使用 MySQL 来存储和管理数据&#xff0c;已经广泛应用于各个领域、各类大小型应用中。 使用 MySQL 来存储和管理数据的应用中&#xff0c;与数据库之间的连接…

程序员如何利用AI大模型逆袭

随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;尤其是大规模预训练模型&#xff08;如GPT-4、BERT等&#xff09;的出现&#xff0c;程序员迎来了一个前所未有的机会窗口。AI不仅能提高开发效率&#xff0c;还能为程序员提供创新创业的机会。本文将探讨程序…

pytorch, torch_tesnsorrt安装各版本匹配

python -m pip install torch2.3.0 torchvision0.18.0 torch-tensorrt2.3.0 tensorrt10.0.1 --extra-index-url https://download.pytorch.org/whl/cu118 如果import tensorrt失败&#xff0c;则从官网下载再安装 https://developer.nvidia.com/tensorrt/download/10x 下载10.0…

四、Docker使用

1. 快速入门 1.1. Docker背景介绍 Docker是一个开源的平台&#xff0c;用于开发、交付和运行应用程序。它能够在Windows&#xff0c;macOS&#xff0c;Linux计算机上运行&#xff0c;并将某一应用程序及其依赖项打包至一个容器中&#xff0c;这些容器可以在任何支持Docker的环…