• vue使用domtoimage实现移动端H5页面截图


    dom-to-image是一个可以将任意DOM节点转换为用JavaScript编写的矢量(SVG)或光栅(PNG或JPEG)图像的库。 它基于Paul Bakaus的domvas并且已被完全重写,修复了一些错误并添加了一些新功能(如Web字体和图像支持)。

    github:点击查看

    线上demo:点击查看

    npm安装和引用

    npm install dom-to-image
     
    import domtoimage from 'dom-to-image';

    domtoimage方法和属性
    domtoimage主要的方法有:
    domtoimage.toPng(...);将节点转化为png格式的图片
    domtoimage.toJpeg(...);将节点转化为jpg格式的图片
    domtoimage.toSvg(...);将节点转化为svg格式的图片,生成的图片的格式都是base64格式
    domtoimage.toBlob(...);将节点转化为二进制格式,这个可以直接将图片下载
    domtoimage.toPixelData(...);获取原始像素值,以Uint8Array 数组的形式返回,每4个数组元素表示一个像素点,即rgba值。这个方法也是挺实用的,可以用于WebGL中编写着色器颜色。

    domtoimage主要的属性有:
    filter : 过滤器节点中默写不需要的节点;
    bgcolor : 图片背景颜色;
    height, width : 图片宽高;
    style :传入节点的样式,可以是任何有效的样式;
    quality : 图片的质量,也就是清晰度;
    cacheBust : 将时间戳加入到图片的url中,相当于添加新的图片;
    imagePlaceholder : 图片生成失败时,在图片上面的提示,相当于img标签的alt;

    实现代码

    <template>
      <div id="pageDiv" :style="{'padding-top':isWeiXin || isApps?'0':'3rem'}">
        <!-- 页面头部-->
        <header-com :poptitle="'domtoimage截图'" :type="'doc_title'" v-if="!isWeiXin && !isApps"></header-com>
        <!-- 页面的主要内容 -->
        <section class="content">
          <div class="qr-code-box" id="my-node">
            <vue-qr
              :logoSrc="config.logo"
              :text="config.value"
              class="qr-code-pic"
              :correctLevel="3"
              :margin="0"
              :dotScale="0.5"
            ></vue-qr>
     
            <button type="button" class="shot-btn" @click="shotPic">截图</button>
     
            <img :src="img" v-if="img" />
          </div>
        </section>
      </div>
    </template>
    <script>
    import HeaderCom from "@/components/header"; //页面头部
    import { changeUrl } from "@/utils/changeUrl";
    import VueQr from 'vue-qr'; //二维码插件
    import domtoimage from 'dom-to-image'
    export default {
      data() {
        return {
          isWeiXin: TS_WEB.isWeiXin,
          isApps: TS_WEB.isApp,
          config: {
            value: "",
            logo: require("@/statics/images/system/sjbj.jpg")
          },
          img: ""
        };
      },
      components: {
        HeaderCom,
        VueQr,
        domtoimage
      },
      methods: {
        changeUrl,
        shotPic() {
          let node = document.getElementById('my-node');
          domtoimage.toPng(node)
            .then((dataUrl) => {
              this.img = dataUrl;
            })
            .catch(function (error) {
              console.error('oops, something went wrong!', error);
            });
        }
      },
      mounted() {
        this.config.value = "https://www.baidu.com/";
      },
      created() {
        document.title = "domtoimage截图";
      }
    };
    </script>
     
    <style lang="less" scoped>
    // 盒子模型
    #pageDiv {
       100%;
      height: 100%;
      padding-top: 0;
      padding-bottom: 0;
      overflow: hidden;
      position: relative;
      box-sizing: border-box;
      .content {
        height: 100%;
         100%;
        overflow: scroll;
        overflow-x: hidden;
        .qr-code-box {
           100%;
          height: 100%;
          #new_img {
             100%;
            display: block;
          }
        }
      }
    }
    </style>

     效果预览

  • 相关阅读:
    tableView操作数据持久化
    9.0banb以前和9.0以后版本后JSON解析
    数据持久化存储回顾
    解决Xcode会出现的问题
    iview-cli 项目、iView admin 代理与跨域问题解决方案
    将变量做为一个对象的key,push新增进一个数组
    页面加载速度优化的建议
    vue中渲染页面,动态设置颜色
    e.currentTarget与e.target
    iview中tree的事件运用
  • 原文地址:https://www.cnblogs.com/linfblog/p/12147424.html
Copyright © 2020-2023  润新知