vue +canvas+html2canvas +StackBlur.js(照片模糊处理)实现照片打码分享

需求:把指定内容敏感信息打码后,然后分享

操作:点击生成海报按钮,弹出内容,点击打码分享,生成照片

逻辑:
1:内容弹出,element + el-dialog
2:打码(文字打码+照片打码处理)html2canvas + StackBlur
3.照片下载 html2canvas + a.click()

话不多说按钮逻辑看代码

1.弹出内容
在这里插入图片描述

在这里插入图片描述
2.打码,设置样式 -webkit-filter: blur(10px) 并绑定class

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.下载 html2canvas
给需要下载的内容再加属性ref。来获取
首先要下载html2canvas

npm install html2canvas

在需要的页面引入

import html2canvas from “html2canvas”;

在这里插入图片描述
页面操作:
在这里插入图片描述
在这里插入图片描述

看着到,你可能会很激动,我马上就要成功了!!!,
在这里插入图片描述

打开照片之后!!!

在这里插入图片描述
在这里插入图片描述

what!!!说好的打码呢!!!
在这里插入图片描述

备注:canvas是把内容生成照片进行然保存,然后下载,如果要把照片打码,就要把照片进行模糊处理
重点: 照片处理

下载stackblur-canvas

npm install stackblur-canvas

在需要的页面引入

import * as StackBlur from “stackblur-canvas”;

html:加入一行代码放处理过的照片

在这里插入图片描述
把内容生成照片再把照片模糊处理
在这里插入图片描述
在这里插入图片描述
页面效果:
点击生成之后,页面会有两块内容,上面是模糊的照片,下面是模糊的内容
在这里插入图片描述
在这里插入图片描述
看到这基本上照片模糊已经处理,下面就要在页面展示优化,加上判断展示
完整代码如下

<template>
  <div>
    <el-button type="primary" @click="getdialogVisible()">生成海报</el-button>
    <el-dialog title="海报" :visible.sync="dialogTableVisible" width="60%">
      <template>
        <!-- 存放生存模糊的照片 -->
        <div v-if="imgContSign" class="cont-div" ref="imgcont"></div>
        <div v-if="imageDomSign" class="cont-div" ref="imageDom">
          <img
            :class="{ hiddenBox: hiddenBox }"
            class="img"
            src="../../assets/img/information/list_isnull.png"
          />
          <div :class="{ hiddenBox: hiddenBox }">这是打码分享的内容喲</div>
        </div>
      </template>
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogTableVisible = false">取 消</el-button>
        <el-button type="primary" @click="getHiddenBox()">打码分享</el-button>
      </span>
    </el-dialog>
  </div>
</template>

<script>
// import Mosaic from "image-mosaic";
import * as StackBlur from "stackblur-canvas";
import html2canvas from "html2canvas";

export default {
  data() {
    return {
      // 截图
      dialogTableVisible: false,
      hiddenBox: false,
      imgContSign: false,
      imageDomSign: true,
    };
  }, //data end
  mounted() {},

  methods: {
    getdialogVisible() {
      this.dialogTableVisible = !this.dialogTableVisible;
    },
    getHiddenBox() {
      this.imageDomGetCont();
    },

    // 生成照片
    imageDomGetCont() {
      let _this = this;
      _this.imgContSign = true;
      _this.imageDomSign = false;
      html2canvas(_this.$refs.imageDom).then((canvas) => {
        // 转成图片,生成图片地址  先生成照片
        let img = new Image();
        img.src = canvas.toDataURL("image/jpeg"); // toDataURL :图片格式转成 base64
        img.setAttribute("id", "imgDiv");
        _this.$refs.imgcont.appendChild(img);
        // 再给照片处理
        img.onload = function () {
          var canvas = document.createElement("canvas");
          canvas.setAttribute("id", "myCanvas");
          var ctx = canvas.getContext("2d");
          var w = img.width;
          var h = img.height;
          _this.$refs.imgcont.appendChild(canvas); //给照片放进dom
          ctx.drawImage(img, 0, 0, w, h); //设置大小
          StackBlur.image("imgDiv", "myCanvas", 10, true); //设置模糊度
          canvas.style.width = w + "px";
          canvas.style.height = h + "px";
          img.remove();
          _this.imageDomGets();
        };
      });
    },
    // 导出
    imageDomGets() {
      let _this = this;
      this.hiddenBox = true;
      // 延时器 为了防止页面dom没加载就下载
      setTimeout(function () {
        html2canvas(_this.$refs.imgcont).then((canvas) => {
          // 转成图片,生成图片地址
          _this.bannerDownUrl = canvas.toDataURL("image/png");
          var a = document.createElement("a");
          a.download = name || "下载分享";
          // 设置图片地址
          a.href = _this.bannerDownUrl;
          a.style.display = "none";
          document.body.appendChild(a);
          a.click();
          _this.dialogTableVisible = false;
        });
      }, 100);
    },
  },
};
</script>

<style scoped>
.cont-div {
  border: 1px solid #eee;
  padding: 10px;
  width: 500px;
}
.img {
  width: 80px;
  height: 80px;
  border: 1px solid #eee;
}
.hiddenBox {
  -webkit-filter: blur(10px);
}
</style>

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值