vue2.0 自定义 生成二维码(QRCode)组件

1.自定义 生成二维码组件

QRCode.vue

<!-- 生成二维码 组件 -->
<template>
  <canvas
    class="qrcode-canvas"
    :class="{show: show}"
    :style="{height: size + ‘px‘, width: size + ‘px‘}"
    :height="size"
    :width="size"
    ref="qr"
  ></canvas>
</template>

<script>
  import qr from ‘qr.js‘
  export default {
    name: ‘qrcode‘,
    props: {
      val: {
        type: String,
        required: true
      },
      size: {
        type: Number,
        default: 200
      },
      // ‘L‘, ‘M‘, ‘Q‘, ‘H‘
      level: String,
      bgColor: {
        type: String,
        default: ‘#FFFFFF‘
      },
      fgColor: {
        type: String,
        default: ‘#000000‘
      },
      show: {
        type: Boolean,
        default: true
      }
    },
    watch: {
      size: function(){
        this.update()
      },
      val: function(){
        this.update()
      },
      level: function(){
        this.update()
      },
      bgColor: function(){
        this.update()
      },
      fgColor: function(){
        this.update()
      }
    },
    mounted () {
      this.update()
      console.log(this.show)
    },
    methods:{
      update () {
        var size = this.size
        var bgColor = this.bgColor
        var fgColor = this.fgColor
        var $qr = this.$refs.qr
        var qrcode = qr(this.val)
        var ctx = $qr.getContext(‘2d‘)
        var cells = qrcode.modules
        var tileW = size / cells.length
        var tileH = size / cells.length
        var scale = (window.devicePixelRatio || 1) / getBackingStorePixelRatio(ctx)
        $qr.height = $qr.width = size * scale
        ctx.scale(scale, scale)
        cells.forEach(function (row, rdx) {
          row.forEach(function (cell, cdx) {
            ctx.fillStyle = cell ? fgColor : bgColor
            var w = (Math.ceil((cdx + 1) * tileW) - Math.floor(cdx * tileW))
            var h = (Math.ceil((rdx + 1) * tileH) - Math.floor(rdx * tileH))
            ctx.fillRect(Math.round(cdx * tileW), Math.round(rdx * tileH), w, h)
          })
        })
      }
    }
  }
  function getBackingStorePixelRatio (ctx) {
    return (
      ctx.webkitBackingStorePixelRatio ||
      ctx.mozBackingStorePixelRatio ||
      ctx.msBackingStorePixelRatio ||
      ctx.oBackingStorePixelRatio ||
      ctx.backingStorePixelRatio ||
      1
    )
  }
</script>

<style lang="less" scoped>
  .qrcode-canvas {
    display: none
  }
  .show {
    display: block;
  }
</style>

2.页面调用

<!-- 生成二维码 -->
<template>
  <div>
    <!-- 标题栏 -->
    <mt-header title="生成二维码">
      <router-link to="/" slot="left">
        <mt-button icon="back">返回</mt-button>
      </router-link>
    </mt-header>
    <!-- 内容 -->
    <div id="qrCode">
      <QRCode :val="val" :show="true" />
    </div>
    <!-- 按钮 -->
    <mt-button type="primary" @click="changeUrl">修改url</mt-button>
  </div>
</template>

<script>
  import QRCode from ‘../components/QRCode.vue‘
  import { MessageBox } from ‘mint-ui‘;

  export default {
    name: ‘QR‘,
    components: {
      QRCode
    },
    data(){
      return {
        val:‘https://www.baidu.com/s?wd=123‘
      }
    },
    methods: {
      changeUrl(){
        MessageBox.prompt(‘请输入新的url‘).then(({ value, action }) => {
          this.val = value;
        });
      }
    }
  }
</script>

<style>
  /*垂直水平居中*/
  #qrCode {
    width: 200px;
    height: 200px;
    position: absolute;
    left: 50%;
    top: 50%;
    margin: -100px 0 0 -100px;
  }
  .mint-button{
    width: 80%;
    margin: 20px auto;
    display: block;
  }
</style>

3.效果图

时间: 2024-07-30 06:35:04

vue2.0 自定义 生成二维码(QRCode)组件的相关文章

java利用zxing开源工具生成二维码QRCode

原文:java利用zxing开源工具生成二维码QRCode 源代码下载地址:http://www.zuidaima.com/share/1550463727340544.htm

通过QRCode生成二维码与解码

先决条件: 需要的JAR包qrcode.jar(官网介绍),直接下载QRCode.jar 将QRCode.jar 加入到Maven库 mvn install:install-file?-DgroupId=[包名]?-DartifactId=[项目名]?-Dversion=[版本号]?-Dpackaging=[jar]?-Dfile=[jar文件所在路径] ?例子: ?mvn install:install-file -DgroupId=com.swetake -DartifactId=QRCod

PHP生成二维码【谷歌API+qrcode+圆角Logo】

这几天在开发公司的企业版块,想在每个企业的展示页面上添加一个公司的二维码,通过扫描二维码便可以将公司的信息导入手机通讯录中,想法产生了,于是开始搜索PHP生成二维码的方法,比较流行的方法主要有两种:1谷歌二维码API:2 PHP QR CODE:本文将重点介绍这两种方法.  方法一:谷歌二维码API 接口地址:https://chart.googleapis.com/chart 官方文档:https://developers.google.com/chart/infographics/docs/

C# 利用QRCode生成二维码图片

引用LYBwwp的博文http://blog.csdn.net/lybwwp/article/details/18444369 网上生成二维码的组件是真多,可是真正好用的,并且生成速度很快的没几个,QRCode就是我在众多中找到的,它的生成速度快.但是网上关于它的使用说明,真的太少了,大都是千篇一律的复制粘贴.这是本要用它做了一个项目后,简单的整理了一下. 组件下载地址:http://download.csdn.net/detail/lybwwp/6861821 下载文件包包含ThoughtWo

使用QRCode和zXing生成二维码

首先将需要的jar加到工程中 QRCode.jar.zxingcore-2.2.jar.javase-2.2.jar(也可不加,增加一个MatrixToImageWriter类也可以) package com.demo; import com.google.zxing.common.BitMatrix; import javax.imageio.ImageIO; import java.io.File; import java.io.OutputStream; import java.io.IO

使用jquery.qrcode生成二维码实现微信分享功能

前言: 最近有个这样的需求,在pc端的商品详情页增加分享功能. 微博分享.QQ好友分享.QQ空间分享这些都很常见.但是微信分享我还没有手动写过(以前改过). 最终效果如下图: 解决方案:使用jquery.qrcode插件生成二维码 jquery.qrcode cdn地址 参见: https://www.bootcdn.cn/jquery.qrcode/ 1.加载 jQuery 和 jquery.qrcode.js: <script src="https://cdn.bootcss.com/

使用zxing批量生成二维码立牌

使用zxing批量在做好的立牌背景图的指定位置上,把指定的文本内容(链接地址.文本等)生成二维码并放在该位置, 最后加上立牌编号. 步骤: 1).做好背景图,如下图: 2).生成二维码BufferedImage对象.代码如下: /** * * @Title: toBufferedImage * @Description: 把文本转化成二维码图片对象 * @param text * 二维码内容 * @param width * 二维码高度 * @param height * 二位宽度 * @par

Java实现二维码QRCode的编码和解码

涉及到的一些主要类库,方便大家下载: 编码lib:Qrcode_swetake.jar   (官网介绍-- http://www.swetake.com/qr/index-e.html) 解码lib:qrcode.jar                 (官网介绍-- http://sourceforge.jp/projects/qrcode/) [一].编码: Java代码QRCodeEncoderHandler.java package michael.qrcode; import java

java生成二维码

具体代码如下,作为一个新手,期待与你一起交流: 1 import java.awt.Color; 2 import java.awt.Graphics2D; 3 import java.awt.image.BufferedImage; 4 import java.io.File; 5 6 import javax.imageio.ImageIO; 7 8 import com.swetake.util.Qrcode; 9 public class QRCodeEncoderHandler { 1