vue项目中如何将当前页面生成图片

 更新时间:2023年10月30日 08:50:08   作者:末日与曙光  
这篇文章主要介绍了vue项目中如何将当前页面生成图片问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

闲着没事总结一下vue 项目中将当前页面生成图片,给各位看官做个参考。

安装所需依赖

npm install --save html2canvas // 页面转图片

详细代码

累了,毁灭吧,直接上代码,代码里的注释已经解释完了;

对了,这是移动端样式;

<template>
  <div class="ReservedSucceed">
    <div id="ReservedSucceed" @click="imgBox=false">
        <div class="content" v-for="item in strList" :key="item.label">
          <p class="hide">{{item.str}}</p>
        </div>
    </div>
    <el-button type="primary" @click="imgBox=true" >网页生成图片</el-button>
    <div class="imgBox" v-show="imgBox">
      <div class="img">
        <img :src="fileId" alt="">
      </div>
      <div class="box">
        <a class="down" href download="图片名字">请长按保存图片</a>
      </div>
    </div>
    
  </div>
</template>

<script>
import html2canvas from 'html2canvas'

export default {
  data() {
    return {
      fileId:"",
      imgurl: null,
      imgBox: false,
      strList:[
        {str:"要永远坚信这一点:一切都会变的,无论受多大创伤心情多么沉重,一贫如洗也好,都要坚持住。太阳落了还会升起,不幸的日子总会有尽头,过去是这样,将来也是这样。早安!",label:"1"},
        {str:"这是他的似水流年,不是我的。岁月如流,就如月在当空,照着我们每一个人,但是每个人的生活都不一样。",label:"2"},
        {str:"流水是白云的影子,月亮是太阳的影子,黑夜是白天的影子,痛苦是爱的影子。不求你做我的影子,甘愿我做你的影子。",label:"3"},
        {str:"花开一季,人活一世,只有时光安然无恙。那些转正确的弯,那些流下的泪水,那些滴下的汗水,不论好坏,终究成全了现在的自己。",label:"4"},
        {str:"人生没有假设,当下即是全部。人生的幸与不幸,关键看你面向哪里。幸福如阳光,不幸是阴影,有阳光就必然有阴影。人生一边是永无止境的追求,一边是平淡如水的流年。不是每一次追求都能成功,不是每一次付出都有收获。",label:"5"},
        {str:"在沧海桑田,我们就是那起舞的蝴蝶,无论今天怎样,明天我还会在这里,路过我曾经去过的地方,探索我未实现的未来,哪怕是蝴蝶飞不过沧海。",label:"6"},
        {str:"从容来去,坦然今生。无论生命给了我们什么,是雨露的滋润,还是阳光的照射,是狂风的吹拂,还是暴雨的敲打,我们都从容地接受,欣然地释放着生命的繁丽。如果遇到的是伤痛,我们就要学会坚忍,并因此练就释怀生命起落的本能。如果遇到的是快乐,我们就幸福地绽开笑容,并把快乐传播。如果遇到的是黑夜,我们就和星星、月亮一起迎接每一个黎明的到来;如果遇到的是白昼,我们就尽情地去欣赏鲜花的绽放、鸟儿的歌唱、蝶儿的轻舞,去拥抱这个美丽而充满生机的世界。",label:"7"},

      ]
    };
  },
  created() {
  },
  mounted() {
    //将网页生成图片
    this.htmlTocanvas();
  },
  methods: {
     //获取截图
     getBase64(fileId) {
      this.fileId = fileId
    },
    //页面生成图片(基础版)
    htmlTocanvas() {
      const that = this;
      html2canvas(document.getElementById("ReservedSucceed")).then(
        async function(canvas) {
        // 第一种方法,生成base64
        // let str = canvas.toDataURL("image/png").split(",")[1];
        
        that.getBase64(canvas.toDataURL("image/png"));
        // 第二种方法,直接下载
        // canvas转换成url,然后利用a标签的download属性,直接下载,绕过上传服务器再下载
        // document
        //   .querySelector(".down")
        //   .setAttribute("href", canvas.toDataURL());
        // 第三种方法,生成的图片的url
        // var imgurl = canvas
        //   .toDataURL("image/png")
        //   .replace("image/png", "image/octet-stream"); // 获取生成的图片的url
        // window.location.href = imgurl; // 下载图片
        }
        
      )
    },
    //页面生成图片(进阶版)
    htmlTocanvas1() {
      //解决生成的网页图片不清晰------预防,暂未出现
      const that = this;
      //创建一个新的canvas

      var canvas2 = document.createElement("canvas");
      // let _canvas = document.querySelector('div');
      let _canvas = document.getElementById("ReservedSucceed");

      var w = parseInt(window.getComputedStyle(_canvas).width);
      var h = parseInt(window.getComputedStyle(_canvas).height);
      //将canvas画布放大若干倍,然后盛放在较小的容器内,就显得不模糊了
      canvas2.width = w * 3;
      canvas2.height = h * 3;
      canvas2.style.width = w + "px";
      canvas2.style.height = h + "px";
      //可以按照自己的需求,对context的参数修改,translate指的是偏移量
      //  var context = canvas.getContext("2d");
      //  context.translate(0,0);
      var context = canvas2.getContext("2d");

      html2canvas(document.getElementById("ReservedSucceed"), {
        canvas: canvas2
      }).then(async function(canvas) {
        // 第一种方法,生成base64
        // let str = canvas.toDataURL("image/png").split(",")[1];
        
        that.getBase64(canvas.toDataURL("image/png"));
        // 第二种方法,直接下载
        // canvas转换成url,然后利用a标签的download属性,直接下载,绕过上传服务器再下载
        // document
        //   .querySelector(".down")
        //   .setAttribute("href", canvas.toDataURL());
        // 第三种方法,生成的图片的url
        // var imgurl = canvas
        //   .toDataURL("image/png")
        //   .replace("image/png", "image/octet-stream"); // 获取生成的图片的url
        // window.location.href = imgurl; // 下载图片
      });
    },
  }
}
</script>

<style lang="scss" scoped>
.ReservedSucceed {
  background-color: white;
  .hide {
    text-indent: 1em;
  }
  .imgBox {
    position: fixed;
    top: 15%;
    left: 25%;
    width: 50%;
    background-color: rgb(232, 236, 232);
    z-index: 2;
    border-radius: 20px;
    padding: 5px;
    .img {
      padding: 10px;
      img {
        width: 100%;
      }
    }
    .box {
      text-align: center;
      margin: 10px 0;
    }
  }
}
</style>

结果图


总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 解决使用Vue.js显示数据的时,页面闪现原始代码的问题

    解决使用Vue.js显示数据的时,页面闪现原始代码的问题

    下面小编就为大家分享一篇解决使用Vue.js显示数据的时,页面闪现原始代码的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • vue 开发之路由配置方法详解

    vue 开发之路由配置方法详解

    这篇文章主要介绍了vue 开发之路由配置方法,结合实例形式详细分析了了vue.js路由原理、配置方法及相关操作注意事项,需要的朋友可以参考下
    2019-12-12
  • Vue之Vue.set动态新增对象属性方法

    Vue之Vue.set动态新增对象属性方法

    下面小编就为大家分享一篇Vue之Vue.set动态新增对象属性方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • 利用webstrom调试Vue.js单页面程序的方法教程

    利用webstrom调试Vue.js单页面程序的方法教程

    这篇文章主要给大家介绍了利用webstrom调试Vue.js单页面程序的方法教程,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来学习学习吧。
    2017-06-06
  • vue中使用codemirror的实例详解

    vue中使用codemirror的实例详解

    这篇文章主要介绍了vue中使用codemirror的实例教程,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2018-11-11
  • 解决threeJS加载obj gltf模型后颜色太暗的方法

    解决threeJS加载obj gltf模型后颜色太暗的方法

    这篇文章主要为大家介绍了解决threeJS加载obj gltf模型后颜色太暗的方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Antd中单个DatePicker限定时间输入范围操作

    Antd中单个DatePicker限定时间输入范围操作

    这篇文章主要介绍了Antd中单个DatePicker限定时间输入范围操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • 如何通过Vue自带服务器实现Ajax请求跨域(vue-cli)

    如何通过Vue自带服务器实现Ajax请求跨域(vue-cli)

    从A页面访问到B页面,并且要获取到B页面上的数据,而两个页面所在的端口、协议和域名中哪怕有一个不对等,那么这种行为就叫跨域,这篇文章给大家介绍如何通过Vue自带服务器实现Ajax请求跨域(vue-cli),感兴趣的朋友一起看看吧
    2023-10-10
  • 在vue项目中使用codemirror插件实现代码编辑器功能

    在vue项目中使用codemirror插件实现代码编辑器功能

    这篇文章主要介绍了在vue项目中使用codemirror插件实现代码编辑器功能(代码高亮显示及自动提示),本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • element-ui 表格数据时间格式化的方法

    element-ui 表格数据时间格式化的方法

    这篇文章主要介绍了element-ui 表格数据时间格式化的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08

最新评论