html2canvas 、html-to-image 下载图片,scale、dpi处理图像模糊

文章介绍了如何使用html2canvas库来截图网页元素,并通过设置scale和dpi解决截图模糊问题,同时提供了下载图片的实现方式,包括使用html-to-image库的替代方案。
摘要由CSDN通过智能技术生成

1、安装html2canvas 依赖

npm i html2canvas

2、 引入html2canvas.js

import html2canvas from "@/utils/html2canvas.js";

3、html

<el-button v-else class="close" @click="toImage">下载</el-button>

4、方法,scale和dpi 解决模糊

toImage() {
      html2canvas(this.$refs.container.querySelector(".canvas"), {
        // 以下字段可选
        width: 490, // canvas宽度
        height: 240, // canvas高度
        x: 0, // x坐标
        y: 0, // y坐标
        foreignObjectRendering: true, // 是否在浏览器支持的情况下使用ForeignObject渲染
        useCORS: true, // 是否尝试使用CORS从服务器加载图像
        async: true, // 是否异步解析和呈现元素
        // allowTaint:true, //允许不同源污染画布
        // proxy:'1',
        // willReadFrequently: true,
        // 以下字段必填
        background: "#ffffff", // 一定要添加背景颜色,否则出来的图片,背景全部都是透明的
        scale: 2, // 处理模糊问题
        dpi: 300, // 处理模糊问题
        onrendered: function (canvas) {
          var downloadUrl = canvas.toDataURL("image/jpeg");
          let aLink = document.createElement("a");
          aLink.style.display = "none";
          aLink.href = downloadUrl;
          aLink.download = "screenPic.png";
          // 触发点击-然后移除
          document.body.appendChild(aLink);
          aLink.click();
          document.body.removeChild(aLink);
        },
      }).catch((error) => {
        console.error("oops, something went wrong!", error);
      }).finally(this.close);
    },

html2canvas.js是从git上下载的:
https://github.com/eKoopmans/html2canvas/tree/develop/dist

单纯下载图片方法===

//确定1 用的npm i html-to-image@1.9.0
//确定2 用的 npm i html2canvas@1.4.1
<el-button v-else class="close" @click="htmlToImage">确定1</el-button> 
<el-button v-else class="close" @click="toImage2">确定2</el-button>

import { toPng } from "html-to-image";
import html2canvas from "@/utils/html2canvas.js";

htmlToImage() {
      toPng(this.$refs.container.querySelector(".canvas"),{
        // 设置宽高
        width: 980, // 设置你想要的宽度,例如 980 像素
        height: 480, // 设置你想要的高度,例如 480 像素
      	backgroundColor: '#ffffff', // 设置背景颜色
        style: {
          transform: 'scale(2)', // 通过缩放来提高清晰度
          transformOrigin: 'top left' // 确保缩放的原点正确
        },
        // 其他选项
        useCORS: true // 尝试使用 CORS 从服务器加载图像
      }
      )
        .then((dataUrl) => {
          const a = document.createElement("a");
          a.setAttribute("download", "screenshot");

          a.href = dataUrl;
          a.click();
        })
        .catch((error) => {
          console.error("oops, something went wrong!", error);
        })
        .finally(this.close);
    },


toImage() {
      html2canvas(this.$refs.container.querySelector(".canvas"), {
        backgroundColor: '#ffffff'
      }).then(canvas => {
        var imgData = canvas.toDataURL("image/jpeg");
        this.fileDownload(imgData);
      })
    },
    fileDownload(downloadUrl) {
      let aLink = document.createElement("a");
      aLink.style.display = "none";
      aLink.href = downloadUrl;
      aLink.download = "海报.png";
      // 触发点击-然后移除
      document.body.appendChild(aLink);
      aLink.click();
      document.body.removeChild(aLink);
    },

参考:
1、解决html2canvas截图模糊的问题
2、html2canvas生成图片模糊 不清楚?两种解决方法
3、html2canvas在H5里生成的图片不清晰很模糊的终极解决方案
4、vue中将html页面转为图片并且下载该图片

HTML2Canvas是一个JavaScript库,用于将HTML元素转换为Canvas对象,并进行截图操作。然而,在某些情况下,由于各种因素的影响,截图可能会变得不清晰。以下是一些可能导致截图不清晰的原因: 1. 分辨率问题:HTML2Canvas是根据用户设备的分辨率来渲染图片的。如果设备的分辨率较低,生成的截图可能会显示模糊或像素化。 2. 图片尺寸过大:如果要截图的元素非常大,超出了Canvas的最大尺寸限制,HTML2Canvas可能会对截图进行缩放。这可能会导致截图失去清晰度。 3. CSS样式问题:某些CSS样式属性可能会导致截图不清晰。例如,使用transform属性进行缩放、旋转或倾斜的元素,可能在截图中显示出锯齿或模糊效果。 4. 图片加载问题:如果要截图的元素包含了远程的图片或者CSS背景图片,并且这些资源加载速度较慢或者未加载完成,可能会导致截图中出现空白或残缺的部分。 为了解决这些问题,我们可以尝试以下方法: 1. 调整分辨率:如果可能的话,尝试增加设备的分辨率,可以提高截图的清晰度。 2. 缩小截图范围:如果要截图的元素太大,可以尝试缩小截图的范围,以避免超出Canvas的最大尺寸。 3. 检查CSS样式:检查要截图的元素的CSS样式,避免使用会导致模糊效果的属性。 4. 确认资源加载完整:确保要截图的元素包含的图片或者背景图片已经加载完成,可以通过监听图片的加载事件来确认。 总之,HTML2Canvas截图不清晰可能是由于多种因素造成的,我们可以通过调整分辨率、缩小截图范围、检查CSS样式和确认资源加载完整来提高截图的清晰度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值