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页面转为图片并且下载该图片

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐