在vue中将Dom元素转成图片显示并且可以下载图片

项目中经常碰到如何将一个页面以图片的形式保存下来或者几个图片合为一个图片,用作存档

在原生JavaScript中利用html2canvas.js将dom转为图片并保存,在Vue中也是类似的,不过都有依赖包使用

这里我们利用 html2canvas依赖

第一步:安装

npm install html2canvas --save

第二步:在需要使用的页面引入

import html2canvas from "html2canvas"

第三步:构建

  <div  class="canvas_box" id="mycanvas" ref="mycanvas"></div>//里面放置图片等元素(需要合成到图片里的元素)
   //如果需要合成按钮操作的话,如果是vue中想要页面出现就获取就要在create中调用
    <button @click="toImage('mycanvas')">合 成</button>

实现:写法—注意这是没有合成按钮操作的,如果需要,可以通过传值这是直接将某页面的缩略图显示在某一个页面的角落

toImage() {
      // console.log("确认下载预编码接口");
        // ---------------------------------------------------------------------------
        window.pageYoffset = 0;
        document.documentElement.scrollTop = 0;
        document.body.scrollTop = 0;
        // 先获取你要转换为img的dom节点
        var node = document.getElementById("mycanvas"); //传入的id名称
        // console.log("node", node);
        var width = node.offsetWidth; //dom宽
        var height = node.offsetHeight; //dom高
        var scale = 2; //放大倍数 这个相当于清晰度 调大一点更清晰一点
        html2canvas(node, {
          width: width,
          heigth: height,
          backgroundColor: "#ffffff", //背景颜色 为null是透明
          dpi: window.devicePixelRatio * 2, //按屏幕像素比增加像素
          scale: scale,
          X: 0,
          Y: 0,
          scrollX: -3, //如果左边多个白边 设置该偏移-3 或者更多
          scrollY: -10,
          useCORS: true, //是否使用CORS从服务器加载图像 !!!
          allowTaint: true, //是否允许跨域图像污染画布  !!!
        }).then((canvas) => {
          // console.log("canvas", canvas);
          var url = canvas.toDataURL(); //这里上面不设值cors会报错
          var a = document.createElement("a"); //创建一个a标签 用来下载
          a.download = "名"; //设置下载的图片名称
          var event = new MouseEvent("click"); //增加一个点击事件
          this.dataURL = url;
			//如果需要下载的话就加上这两句
			a.href = url;//此处的url为base64格式的图片资源
	        a.dispatchEvent(event); //触发a的单击事件 即可完成下载
        });
    }

注意:如果是需要页面加载出来的时候就出现,一定要设置一个定时器,如果dom结构或者页面并没有加载完成,那么绘制出来的图是不完整的
如:

setTimeout(() => {
   this.toImage();
}, 50);
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue中将DOM节点转换为图像需要借助于HTML5的Canvas元素和toDataURL()方法。下面是具体步骤: 1. 安装html2canvas 在Vue使用html2canvas库可以方便地将DOM节点转换为图像。可以使用npm或yarn安装html2canvas: ``` npm install html2canvas --save ``` 或 ``` yarn add html2canvas ``` 2. 编写代码 在Vue组件,可以通过refs获取要转换为图片DOM节点。然后可以在mounted钩子函数使用html2canvas库将DOM节点绘制到Canvas元素上。最后,可以将Canvas元素转换为base64编码的图像数据,将其设置为图片的src属性。 以下是示例代码: ``` <template> <div> <div ref="content"> <!-- 要转换为图片的内容 --> </div> <button @click="convertToImage">转换为图片</button> <img ref="image"> </div> </template> <script> import html2canvas from 'html2canvas'; export default { mounted() { // 将DOM节点转换为Canvas元素 html2canvas(this.$refs.content) .then(canvas => { // 将Canvas元素转换为图像数据 const dataURL = canvas.toDataURL(); this.$refs.image.src = dataURL; }) }, methods: { convertToImage() { // 点击按钮时重新绘制Canvas元素 html2canvas(this.$refs.content) .then(canvas => { const dataURL = canvas.toDataURL(); this.$refs.image.src = dataURL; }) } } } </script> ``` 此代码将一个div元素(使用ref="content"引用)转换为图像,并将其显示在一个img元素(使用ref="image"引用)。在mounted钩子函数dom节点会立即被转换成canvas并渲染为图像。在convertToImage方法,会在点击按钮时重新绘制Canvas元素。 3. 注意事项 使用这种方法将DOM节点转换为图像有一些注意事项: - 由于Canvas元素具有像素密度,因此可以通过设置宽度和高度属性来调整画布的分辨率。例如:canvas.width = 500,canvas.height = 500; - 转换为图像的DOM节点不能包含跨域资源,否则不会渲染到Canvas; - 转换的DOM节点的CSS可能会失效,在绘制到Canvas之前需要手动覆盖样式。 总之,通过安装html2canvas库,将DOM节点转换为Canvas元素,并使用toDataURL()方法将其转换为图像数据是可行的。需要注意的是,可能需要处理像素密度,跨域资源和CSS兼容性的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值