dom-to-image

news2024/11/19 9:30:48

前言

之前的文章:vue基于html2canvas和jspdf 生成pdf 、解决jspdf中文乱码问题 简单介绍了html2canvas的基本使用,html2canvas 只能截取可视区域,对于含有滚动条的无法完全截取。后来发现还有一个dom-to-image的库可以支持,并且能够生成svgpngjpeg 3种格式,当然缺点是不支持safari,并且手机端上兼容性不好。

官方文档 ,不得不说有些库是真恶心,起个差不多的名字,找了半天才找到

安装

npm install dom-to-image

import domtoimage from 'dom-to-image';

主要方法和属性

方法:

  • domtoimage.toPng(…);将节点转化为png格式的图片
  • domtoimage.toJpeg(…);将节点转化为jpg格式的图片
  • domtoimage.toSvg(…);将节点转化为svg格式的图片,生成的图片的格式都是base64格式
  • domtoimage.toBlob(…);将节点转化为二进制格式,这个可以直接将图片下载
  • domtoimage.toPixelData(…);获取原始像素值,以Uint8Array 数组的形式返回,每4个数组元素表示一个像素点,即rgba值。这个方法也是挺实用的,可以用于WebGL中编写着色器颜色。

属性:

  • filter : 过滤器节点中默写不需要的节点;
  • bgcolor : 图片背景颜色;
  • height, width : 图片宽高;
  • style :传入节点的样式,可以是任何有效的样式;
  • quality : 图片的质量,也就是清晰度;一个介于 0 和 1 之间的数字,表示 JPEG 图像的图像质量(例如 0.92 => 92%)。默认为 1.0 (100%)
  • cacheBust : 将时间戳加入到图片的url中,相当于添加新的图片;
  • imagePlaceholder : 图片生成失败时,在图片上面的提示,相当于img标签的alt;

使用

png

<template>
    <div>
        <div style="padding:50px;width:500px;border:1px solid red;" id="test">
            <p>我是p标签</p>
            <h1>我是h1标签</h1>
            <div>我是div标签</div>
            <img src="./11.jpg" style="width:200px;" />
        </div>
        <el-button type="primary" @click="createImage">生成图片</el-button>

        <div style="width:500px;height:200px;margin-top:20px;border:1px solid red;">
            <p>生成的图片</p>
            <img :src="dataUrl" style="width:200px;" />
        </div>
    </div>
</template>

<script>
import domtoimage from 'dom-to-image'
export default {
    data() {
        return {
            dataUrl: ''
        }
    },
    methods: {
        createImage() {
            let node = document.getElementById('test');
            let that = this
            domtoimage.toPng(node)
                .then(function (dataUrl) {
                    //console.log(dataUrl)
                    that.dataUrl = dataUrl
                })
                .catch(function (error) {
                    console.error('生成失败', error);
                });

        }
    }
}
</script>

效果
在这里插入图片描述

其他格式

代码同png,用对应的方法即可

属性

filter

createImage() {
    let node = document.getElementById('test');
    let that = this
    domtoimage.toPng(node, { filter: that.filterTag })
        .then(function (dataUrl) {
            console.log(dataUrl)
            that.dataUrl = dataUrl
        })
        .catch(function (error) {
            console.error('生成失败', error);
        });
},
filterTag(node) {
    console.log(node, node.tagName)
    return node.tagName == 'IMG'
}

注意:先打印一下标签名,一开始以为图片就是img结果是IMG
在这里插入图片描述

bgcolor

domtoimage.toPng(node, { bgcolor: '#ddd' })
 .then(function (dataUrl) {
     console.log(dataUrl)
     that.dataUrl = dataUrl
     // FileSaver.saveAs(dataUrl, 'a.png');
 })
 .catch(function (error) {
     console.error('生成失败', error);
 });

在这里插入图片描述

其他略,没有尝试

下载图片

需要借助:file-saver,基本使用见:FileSaver.js的简单使用

示例:

<template>
    <div>
        <div style="padding:50px;width:500px;border:1px solid red;" id="test">
            <p>我是p标签</p>
            <h1>我是h1标签</h1>
            <div>我是div标签</div>
            <img src="./11.jpg" style="width:200px;" />
        </div>
        <el-button type="primary" @click="createImage">生成图片</el-button>
        <div style="width:500px;height:200px;margin-top:20px;border:1px solid red;">
            <p>生成的图片</p>
            <img :src="dataUrl" style="width:200px;" />
        </div>
    </div>
</template>

<script>
import domtoimage from 'dom-to-image'
import FileSaver from 'file-saver';
export default {
    data() {
        return {
            dataUrl: ''
        }
    },
    methods: {
        createImage() {
            let node = document.getElementById('test');
            let that = this
            domtoimage.toPng(node)
                .then(function (dataUrl) {
                    console.log(dataUrl)
                    that.dataUrl = dataUrl
                    FileSaver.saveAs(dataUrl, 'a.png');
                })
                .catch(function (error) {
                    console.error('生成失败', error);
                });
        },
    }
}
</script>

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

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

相关文章

【C#+JavaScript+SQL Server】实现Web端考试系统 六:后台管理模块设计(附源码和资源)

需要源码和资源请点赞关注收藏后评论区留言私信~~~ 一、后台管理模块概述 在线考试系统中&#xff0c;后台管理员模块具有最高权限&#xff0c;管理员通过登录模块成功登录之后&#xff0c;可以对试题信息&#xff0c;教师信息&#xff0c;考生信息&#xff0c;考试科目信息以…

CSS渐变背景看这一篇就够了

CSS渐变背景看这一篇就够了 在我们自己设计网页的时候&#xff0c;为了好看美观&#xff0c;颜色可谓是最让人头疼的一部分。尤其是在配色上又找不到一些好看的网站。今天我就来记录一些好看的渐变式背景&#xff0c;和一些常用的颜色网站。 CSS 渐变使可以显示两种或多种指定…

Vue Admin Template关闭eslint校验,lintOnSave:false设置无效解决办法

目录 第一步&#xff1a;lintOnSave&#xff1a;false 第二步&#xff1a;修改package.json中的配置 最后一步&#xff1a; 使用Vue Admin Template 二次开发是一件非常愉悦的事情&#xff0c;可是它里面的eslint真的是十分恶心人啊&#xff0c;对此我找了很多方法都没有解决…

浏览器强缓存与协商缓存详解以及实践

"我这边把代码更新上服务器了&#xff0c;你那边看一下呢?" "我这边还有这个问题&#xff0c;你改没改哦?" "我改了啊&#xff0c;不信你看我代码......噢&#xff0c;可能是浏览器缓存问题&#xff0c; 你F5刷新一下试试&#xff0c;如果不行 就Ct…

超星章节内ppt课件下载

超星章节内课件下载 欢迎访问个人博客&#xff1a;www.xuanworld.top 前言 ​ 一般来说&#xff0c;如果老师设置超星学习通章节内的ppt加密&#xff0c;那么ppt是无法下载的&#xff0c;超星不会提供下载接口&#xff0c;但是我们可以通过网络抓包的方式来截取到pdf&#x…

vue-router控制台异常:Uncaught (in promise) Error: Redirected when going from “/“ to “/foo“

qian kun微前端在子应用的路由配置中添加了一个全局前置导航守beforeEach&#xff0c;在前置导航守卫中调用next方法时重写了路由的path&#xff0c;结果控制台每次在路由跳转时都会报异常&#xff0c;但是不影响功能。 这里&#xff0c;我们将这个场景从微前端摘出来&#xf…

uniapp登录拦截器(未登录点击其他地方跳转登录页)

项目场景&#xff1a; 例如&#xff1a;客户要求用户在未登录的情况下&#xff0c;用户只可以在底部导航栏操作&#xff0c;点击其他的的功能都要跳转到登录页面。 uni.addInterceptor拦截器 是uni-app官网提供的拦截器&#xff0c;可以利用它来实现登录拦截器&#xff0c;用户…

vue3+pinia+vuerouter4动态路由菜单

文章目录前言一、用户权限和菜单列表数据二、pinia存储数据状态共享1.创建存储用户详情的user.ts文件2.创建存储用户菜单和权限的menus.ts文件三、设置动态路由1.在router文件夹下面创建routers.ts文件2.设置前置路由守卫3.左侧导航菜单前言 最近在做一个通用后台管理系统的框架…

35.JavaScript对象和数组的解构赋值基础详解、let陷阱、函数参数解构

文章目录35.JavaScript对象和数组的解构赋值数组解构解构不改变原数组忽略数组元素可迭代对象使用解构赋值给任何变量与.entries()方法结合与Map结合变量交换多余的元素对象解构属性变量映射默认值多余的属性let陷阱多层解析函数参数解析总结35.JavaScript对象和数组的解构赋值…

HTML使用Element-UI制作管理系统页面(无需脚手架以及创建vue工程)

HTML正常使用Element-UI前言尝试经历设计附件前言 入职培训到Web前端后布置了一个制作管理系统前端页面的任务&#xff0c;任务要求包含&#xff1a; 1.页面的布局主要为左侧导航菜单栏&#xff0c;右侧为信息展示栏&#xff0c;要体现嵌套 2.点击菜单栏切换右侧信息展示时左侧…

前端在项目中使用mockjs模拟数据的增删改查

背景 在项目开发时&#xff0c;会存在前端界面已经画好了但是后端接口还在开发的情况&#xff0c;此时前端可以先根据接口文档明确自己需要的字段&#xff0c;然后使用mock模拟后端接口进行调试 安装 npm install mockjs 使用 1. 创建vue项目之后&#xff0c;新建一个mock…

基于SpringBoot的校园疫情防控系统设计与实现

1.概述 校园疫情防控系统的开发运用java技术、springboot框架&#xff0c;MIS的总体思想&#xff0c;以及Mysql等技术的支持下共同完成了该系统的开发&#xff0c;实现了校园疫情防控管理的信息化&#xff0c;使用户体验到校园疫情防控管理&#xff0c;管理员管理操作将更加方…

使用 el-table 实现树形数据懒加载、点击行展开、每次只展示一条数据(大类)以及自定义表格合计值

1. 使用 el-table 实现树形数据懒加载 实现必需条件&#xff1a; lazy :load“loadNode” :tree-props“{ children: ‘children’, hasChildren: ‘hasChildren’ }” 注意&#xff1a;特别是第3条&#xff0c;后端接口必须传给你"hasChildren"(名字可以不一样)…

Vue3的vue-router超详细使用

从零开始搭建Vue3环境&#xff08;vitetsvue-router&#xff09;&#xff0c;手拉手做一个router项目搭建vue3环境vue-router入门&#xff08;宝宝模式&#xff09;vue-router基础&#xff08;青年模式&#xff09;一。动态路由匹配1.带参数的动态路由匹配2.捕获所有路由或404 …

uniapp项目中引入vant-Weapp(局部全局都有 史上最详细的方法)

1.先在根目录创建wxcomponents文件夹 2.打开 https://github.com/youzan/vant-weapp 下载最新的vant-Weapp 3.把我们下好的文件vant-weapp里面只留下dist其余的可以全部删掉&#xff0c;然后把vant-weapp放到 wxcomponents里面 4.在App.vue引入vant样式 import /wxcomponents…

蓝桥杯web开发-5道模拟题让你信心满满

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域新星创作者。&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4d…

最好的Vue组件库之Vuetify的入坑指南(持续更新中)

目录 安装Vuetify 文档结构 快速入门 特性 样式和动画 首先先声明&#xff0c;个人不是什么很牛逼的大佬&#xff0c;只是想向那些想入坑Vuetify的前端新手或者嫌文档太长不知如何入手的人提供一些浅显的建议而已&#xff0c;能让你们稍微少走一些弯路就是本文的目的。我其实也…

『从零开始学小程序』媒体组件video组件

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位喜欢写作&#xff0c;计科专业大三菜鸟 &#x1f3e1;个人主页&#xff1a;starry陆离 &#x1f552;首发日期&#xff1a;2022年9月15日星期四 如果文章有帮到你的话记得点赞&#x1f44d;收藏&#x1f497;支持一下哦 『…

Vue结合高德地图实现HTML写自定义信息弹窗

最近在写项目的时候有个需求就是根据点击地图上的点展示对应的信息&#xff0c;弹窗看着还挺花哨的。我在高德地图官网上还有各大平台找了如何自定义弹窗&#xff0c;可给出的大多数都是通过JS写HTML结构&#xff0c;我感觉这种不仅不好布局&#xff0c;而且可读性和维护性都不…

客户端会话跟踪技术 Cookie 浅谈

文章目录前言为什么之前浏览器和服务器不支持数据共享&#xff1f;会话跟踪技术Cookie的概念Cookie的工作流程Cookie的基本使用Cookie原理分析Cookie的存活时间Cookie存储中文前言 用户打开浏览器&#xff0c;第一次访问 Web 服务器资源时&#xff0c;会话建立&#xff0c;直到…