广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue项目中如何实现网页的截图功能 (html2canvas)
  • 353
分享到

vue项目中如何实现网页的截图功能 (html2canvas)

vue网页截图功能vue网页截图vue实现网页截图 2023-02-18 18:02:32 353人浏览 独家记忆
摘要

目录Vue实现网页的截图功能 (html2canvas)先安装html2canvas引入html2canvas主要实现代码在使用html2canvas时vue拖动截图功能实现安装ht

vue实现网页的截图功能 (html2canvas)

最近做地图的项目,有个需求就是前端需要将网页的内容生成一张图片,这个功能如果让后端做的话,前端需要把大量的代码传给后端,然后后端去解析生成图片,再返回给前端,幸运的是,html2canvas.js让这件事情变得简单起来,下面是我在vue项目中实现截图功能的代码:

先安装html2canvas

npm install html2canvas --save

或者

yarn add html2canvas

引入html2canvas

import html2canvas from 'html2canvas'

主要实现代码

1、HTML中:

<template>
    <!--超级地图-->
    <div id="superMap"/>
    
    <!--点击button即可实现页面的截图-->
    <div id="test">
      <el-button @click="getImg">截图</el-button>
    </div>
</template>

2、javascript中:

methods:{

//截图方法
 getImg(){
   html2canvas(
     document.getElementById('superMap'),
     {
       backgroundColor:null,//画出来的图片有白色的边框,不要可设置背景为透明色(null)
       useCORS: true,//支持图片跨域
       scale:1,//设置放大的倍数
     }
   ).then(canvas => {
     //截图用img元素承装,显示在页面的上
     let img = new Image();
     img.src = canvas.toDataURL('image/jpeg');// toDataURL :图片格式转成 base64
     document.getElementById('test').appendChild(img);
 
     //如果你需要下载截图,可以使用a标签进行下载
     let a = document.createElement('a');
     a.href = canvas.toDataURL('image/jpeg');
     a.download = 'test';
     a.click();
   })
 }
 
}

在使用html2canvas时

估计大家可能会遇到下面的问题

1、图片跨域:如果需要截图的地方包含其他域名的图片,那么会出现跨域问题

解决:

  • 1)设置useCORS:true,
  • 2)把后端的图片转成base64
  • 3)将图片都放在同一个域名下

2、画出来的图片有白色的边框

解决:

  • 1)设置 backgroundColor: null

当然本文只是关于html2canvas一小部分的配置的使用,具体可见官网:Http://html2canvas.hertzen.com/documentation

vue拖动截图功能实现

拖动鼠标进行页面截图(也可指定区域拖动截图)

安装html2canvas、vue-cropper

npm i html2canvas --save          //用于将指定区域转为图片
npm i vue-cropper -S             //将图片进行裁剪

在main.js注册vue-cropper组件

import VueCropper from 'vue-cropper'
Vue.use(VueCropper)

页面中引入html2canvas

  import html2canvas from "html2canvas"
  export default{
  }

代码分解

1、将指定区域转为图片

this.$nextTick(()=>{
   html2canvas(document.body,{}).then(canvas => {    
     let dataURL = canvas.toDataURL("image/png");
     this.uploadImg = dataURL
     this.loading = true
   });
 })

这里是将body整个页面转为图片,得到base64格式数据,其他区域直接获取class或者id

2、将生成的图片进行拖动截图

<template>
    <div class="pop_alert" v-if="show">
       <vueCropper
          @mouseenter.native="enter"
          @mouseleave.native="leave"
          ref="cropper"
          :img="uploadImg"
          :outputSize="option.size"
          :outputType="option.outputType"
          :info="true"
          :full="option.full"
          :canMove="option.canMove"
          :canMoveBox="option.canMoveBox"
          :original="option.original"
          :autoCrop="option.autoCrop"
          :fixed="option.fixed"
          :fixedNumber="option.fixedNumber"
          :centerBox="option.centerBox"
          :infoTrue="option.infoTrue"
          :fixedBox="option.fixedBox"
          style="background-image:none"
        ></vueCropper>
        <div class="btn_box">
            <div @click="save">确认截图</div>
               <div @click="close">取消</div>
        </div>
     </div>
 </template>
<script>
 export default{
   data(){
       option: {
          info: true, // 裁剪框的大小信息
          outputSize: 0.8, // 裁剪生成图片的质量
          outputType: "jpeg", // 裁剪生成图片的格式
          canScale: false, // 图片是否允许滚轮缩放
          autoCrop: false, // 是否默认生成截图框
          fixedBox: false, // 固定截图框大小 不允许改变
          fixed: false, // 是否开启截图框宽高固定比例
          fixedNumber: [7, 5], // 截图框的宽高比例
          full: true, // 是否输出原图比例的截图
          canMove: false, //时候可以移动原图
          canMoveBox: true, // 截图框能否拖动
          original: false, // 上传图片按照原始比例渲染
          centerBox: false, // 截图框是否被限制在图片里面
          infoTrue: true // true 为展示真实输出图片宽高 false 展示看到的截图框宽高
        },
        uploadImg:"",
        show: false
   },
   methods:{
     enter() {
       if (this.uploadImg == "") {
         return;
       }
       this.$refs.cropper.startCrop(); //开始裁剪
     },
     leave() {
       this.$refs.cropper.stopCrop();//停止裁剪
     },
     save() {        //确认截图
        this.$refs.cropper.getCropData((data) => {      //获取截图的base64格式数据
          console.log(data)
          this.show = false
        })
        // this.$refs.cropper.getCropBlob(data => { //获取截图的Blob格式数据
        //   this.cutImg = data;
        // });
      },
      close(){        //取消
        this.show = false
      }
   }
 }
 </script>

全部代码

<template>
   <div>
     <div @click="tailoring">裁剪</div>
    <!--继续写页面的其他内容 pop_alert可封装成组件使用-->
    
     <div class="pop_alert" v-if="show">
       <vueCropper
          @mouseenter.native="enter"
          @mouseleave.native="leave"
          ref="cropper"
          :img="uploadImg"
          :outputSize="option.size"
          :outputType="option.outputType"
          :info="true"
          :full="option.full"
          :canMove="option.canMove"
          :canMoveBox="option.canMoveBox"
          :original="option.original"
          :autoCrop="option.autoCrop"
          :fixed="option.fixed"
          :fixedNumber="option.fixedNumber"
          :centerBox="option.centerBox"
          :infoTrue="option.infoTrue"
          :fixedBox="option.fixedBox"
          style="background-image:none"
        ></vueCropper>
        <div class="btn_box">
            <div @click="save">确认截图</div>
               <div @click="close">取消</div>
        </div>
     </div>
   </div>
</template>
<script>
import html2canvas from "html2canvas"
 export default{
  data(){
   return{
     option: {
          info: true, // 裁剪框的大小信息
          outputSize: 0.8, // 裁剪生成图片的质量
          outputType: "jpeg", // 裁剪生成图片的格式
          canScale: false, // 图片是否允许滚轮缩放
          autoCrop: false, // 是否默认生成截图框
          fixedBox: false, // 固定截图框大小 不允许改变
          fixed: false, // 是否开启截图框宽高固定比例
          fixedNumber: [7, 5], // 截图框的宽高比例
          full: true, // 是否输出原图比例的截图
          canMove: false, //时候可以移动原图
          canMoveBox: true, // 截图框能否拖动
          original: false, // 上传图片按照原始比例渲染
          centerBox: false, // 截图框是否被限制在图片里面
          infoTrue: true // true 为展示真实输出图片宽高 false 展示看到的截图框宽高
        },
        uploadImg:"",
        show: false
   }
  },
  methods:{
    tailoring(){            //裁剪
      this.$nextTick(()=>{
           html2canvas(document.body,{}).then(canvas => {
             let dataURL = canvas.toDataURL("image/png");
             this.uploadImg = dataURL
             this.show = true
           });
       })
    },
    enter() {
       if (this.uploadImg == "") {
         return;
       }
       this.$refs.cropper.startCrop(); //开始裁剪
     },
     leave() {
       this.$refs.cropper.stopCrop();//停止裁剪
     },
     save() {        //确认截图
        this.$refs.cropper.getCropData((data) => {      //获取截图的base64格式数据
          console.log(data)
          this.show = false
        })
        // this.$refs.cropper.getCropBlob(data => { //获取截图的Blob格式数据
        //   this.cutImg = data;
        // });
      },
      close(){        //取消
        this.show = false
      }
   }
 }
</script>
<style>
    .pop_alert{
      width: 100%;
      height: 100%;
      position: absolute;
      top: 0;
      left: 0;
      border: 1px dashed red;
      background-color: #000000;
    }
    .btn_box{
        position: absolute;
        top: 0;
        color: red;
        right: 0;
        font-size: 30px;
        display: flex;
        align-items: center;
        z-index: 6666;
    }
</style>

效果图

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: vue项目中如何实现网页的截图功能 (html2canvas)

本文链接: https://www.lsjlt.com/news/196728.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue项目中如何实现网页的截图功能 (html2canvas)
    目录vue实现网页的截图功能 (html2canvas)先安装html2canvas引入html2canvas主要实现代码在使用html2canvas时vue拖动截图功能实现安装ht...
    99+
    2023-02-18
    vue网页截图功能 vue网页截图 vue实现网页截图
  • vue项目中canvas实现截图功能
    本文实例为大家分享了vue项目中canvas实现截图功能的具体代码,供大家参考,具体内容如下 实现效果: 整理一下最近在vue项目中做的一个截图功能(只能够截取图片),即用鼠标在画...
    99+
    2022-09-27
  • vue 实现网页截图功能详解
    最近项目有一个需求,需要上传图片,但是客户上传的图片大小不一,所以我们需要规定客户的图片比例,但又需要是客户所需的,所以就想到了截图 实现效果 我们的架构是vue,所以用的是一个v...
    99+
    2022-11-12
  • vue项目中怎么使用canvas实现截图功能
    本文小编为大家详细介绍“vue项目中怎么使用canvas实现截图功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue项目中怎么使用canvas实现截图功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。实现效...
    99+
    2023-07-02
  • 如何使用Vue实现拖动截图功能
    这篇文章主要介绍了如何使用Vue实现拖动截图功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用Vue实现拖动截图功能文章都会有所收获,下面我们一起来看看吧。一、安装html2canvas、vue-cro...
    99+
    2023-07-04
  • 如何用vue实现网页截图你知道吗
    目录1、安装html2Canvas2、在需要的vue组件中引入3、编写一个截图按钮4、调用函数toImage总结 1、安装html2Canvas npm install html...
    99+
    2022-11-12
  • Vue项目中如何实现带参跳转功能
    这篇文章主要介绍Vue项目中如何实现带参跳转功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!页面介绍:主页面:name —> shishengzuotanhuichaxun此页面表格中的数据均通过接口从后端获...
    99+
    2023-06-14
  • SSM项目中如何使用拦截器实现登录验证功能
    小编给大家分享一下SSM项目中如何使用拦截器实现登录验证功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!登录接口实现public User ...
    99+
    2023-06-28
  • 在Spring项目中使用 Hibernate如何实现一个分页功能
    本篇文章给大家分享的是有关在Spring项目中使用 Hibernate如何实现一个分页功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。最关键的是运用Hibernate的que...
    99+
    2023-05-31
    spring hibernate 分页
  • vue如何使用driver.js实现项目功能向导指引
    目录介绍安装使用突出显示单个元素高亮和弹出窗口定位弹出窗口创建功能介绍异步操作配置定义步骤API方法实战效果介绍 https://github.com/kamranahmedse/d...
    99+
    2023-03-08
    vue向导指引 vue使用driver.js
  • 如何在Java项目中实现一个简单的图片上传功能
    如何在Java项目中实现一个简单的图片上传功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。具体如下:import java.io.*;import java....
    99+
    2023-05-31
    java ava 目中
  • 浅析vue项目中如何使用Intro.js实现用户指引功能
    vue项目中怎么实现用户指引功能?下面本篇文章给大家介绍一下在vue项目中使用Intro.js实现用户指引功能的方法,希望对大家有所帮助!系统发布新版本或者上线新功能后,为方便用户快速了解新功能,通常需要添加一些用户指引界面。常见的用于实现...
    99+
    2023-05-14
    前端 Vue.js
  • html中如何实现截取图片功能(两种方法)
    随着互联网的不断发展,图片已经成为网页设计中不可缺少的重要元素之一。在HTML中,我们可以通过各种技巧来展示和截取图片,使网页更加美观和有吸引力。本文将介绍HTML的图片截取技术,以帮助读者更好地掌握这一技能。一、HTML图片基础知识在HT...
    99+
    2023-05-14
  • vue如何实现简单的分页功能
    这篇文章将为大家详细讲解有关vue如何实现简单的分页功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下我们都知道在spring boot项目中安装pagehelper可以实现分页功能,但是在v...
    99+
    2023-06-29
  • 如何JavaScript项目中实现一个input组件功能
    这篇文章主要介绍了如何JavaScript项目中实现一个input组件功能,此处通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考价值,需要的朋友可以参考下:Java的特点有哪些Java的特点有哪些1.Java语言作为静态面...
    99+
    2023-06-06
  • 如何在Java项目中使用OCR tesseract实现一个图文识别功能
    如何在Java项目中使用OCR tesseract实现一个图文识别功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。代码:package com.zhy.test; im...
    99+
    2023-05-31
    java ocr tesseract ava
  • VUE如何实现选择上传图片并页面显示功能
    这篇文章给大家分享的是有关VUE如何实现选择上传图片并页面显示功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。基于VUE选择上传图片并在页面显示,图片可删除,具体内容如下dem...
    99+
    2022-10-19
  • 如何在java项目中利用ocr实现一个图片文字识别功能
    这期内容当中小编将会给大家带来有关如何在java项目中利用ocr实现一个图片文字识别功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。最近在开发的时候需要识别图片中的一些文字,网上找了相关资料之后,发现g...
    99+
    2023-05-31
    java ocr ava
  • 如何在vue项目中利用饿了么UI实现一个teambition筛选功能
    这篇文章主要为大家详细介绍了如何在vue项目中利用饿了么UI实现一个teambition筛选功能,文中示例代码介绍的非常详细,具有一定的参考价值,发现的小伙伴们可以参考一下:Vue的优点Vue具体轻量级框架、简单易学、双向数据绑定、组件化、...
    99+
    2023-06-06
  • vue移动端项目中如何实现页面缓存的示例代码
    背景 在移动端中,页面跳转之间的缓存是必备的一个需求。 例如:首页=>列表页=>详情页。 从首页进入列表页,列表页需要刷新,而从详情页返回列表页,列表页则需要保持页面缓...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作