Coder Social home page Coder Social logo

wxapp-qrcode's Introduction

微信小程序-二维码生成器

本项目用于在微信小程序中生成二维码,也可用于第三方框架Mpvue,Taro等。

生成预览

jsh5css.cn

  • 可支持输入中文文本

安装

git clone https://github.com/demi520/wxapp-qrcode.git

使用

1.创建canvas节点,以及设置canvas-id。(可以控制该区域不显示,但是必须要存在)

<canvas style="width: 686rpx;height: 686rpx;background:#f1f1f1;" canvas-id="mycanvas"/>

2.引入qrcode.js,将utils/qrcode.js 文件复制到自己工程里,并引入。

// 注意: 这里xxx是你自己的路径
let QR = require("xxxx/qrcode.js")  // require方式
import QR from 'xxxx/qrcode.js'    // es6的方式

3.在js文件中,定义相关的方法,要注意在data中创建imagePath(最终生成的图片路径),可以将img的src属性绑定imagePath

createQrCode: function (content, canvasId, cavW, cavH) {
  //调用插件中的draw方法,绘制二维码图片
  //this.canvasToTempImage 为绘制完成的回调函数,可根据自己的业务添加
  QR.api.draw(content, canvasId, cavW, cavH, this, this.canvasToTempImage);
},

//获取临时缓存图片路径,存入data中
canvasToTempImage: function (canvasId) {
  let that = this;
  wx.canvasToTempFilePath({
    canvasId,   // 这里canvasId即之前创建的canvas-id
    success: function (res) {
      let tempFilePath = res.tempFilePath;
      console.log(tempFilePath);
      that.setData({       // 如果采用mpvue,即 this.imagePath = tempFilePath
        imagePath:tempFilePath,
      });
    },
    fail: function (res) {
      console.log(res);
    }
  });
}

4.绑定事件,调用createQrCode,生成二维码

createQrCode ('wxapp-qrcode', 'mycanvas', 300, 300)

FAQ

自定义组件中不能生成qrcode?

封装方法时: 添加上this, QR.api.draw(url, canvasId, cavW, cavH, this); 可参考qrcode.js 768行,wx.createCanvasContext

如何适配不同屏幕大小的canvas?

可参考 pages/main/index.js 中的 setCanvasSize 方法。

Ps

感谢微信小程序|联盟 @amis提供的素材和创意;

测试有其他问题请回帖哦,感激!!

wxapp-qrcode's People

Contributors

ovenslove avatar wyuanyang avatar z-hnan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wxapp-qrcode's Issues

关于在真机上生成二维码不显示问题

因为在电脑上测试的时候是可以正常生成二维码的,但到手机上后,二维码就不显示了,但只要息屏然后在打开屏幕有出现了,目前不知道原因,我提取了源码中部分代码单独绘制的时候又可以显示绘制路径,但使用完整的代码就不显示了,手机是安卓的,苹果的不知道是不是也一样

大bug

image
真机调试的时候,生成的二维码有问题 如图 而且有时候还不能生成出来,生成的是透明的图片

关于二维码绘制范围和白边的问题

我自己改了下绘制的方法,不知道这样会不会有问题,目前在iOS设备上还行。就是确定下二维码的区域,然后把画布上的这个区域给生成一张图片使用,这样就没有白边了。
/**
* 新增$this参数,传入组件的this,兼容在组件中生成
*/
draw: function (str, canvas, cavW, cavH, $this, ecc) {
var that = this;
ecclevel = ecc || ecclevel;
canvas = canvas || _canvas;
if (!canvas) {
console.warn('No canvas provided to draw QR code in!')
return;
}

  var size = Math.min(cavW, cavH);
  str = that.utf16to8(str);//增加中文显示

  var frame = that.getFrame(str),
    // 组件中生成qrcode需要绑定this 
    ctx = wx.createCanvasContext(canvas, $this),
    px = Math.round(size / (width + 8));
  var roundedSize = px * (width + 8),
    offset = Math.floor((size - roundedSize) / 2);
  size = roundedSize;
  //ctx.clearRect(0, 0, cavW, cavW);
  ctx.setFillStyle('#ffffff')
  ctx.fillRect(0, 0, cavW, cavW);//底部区域绘制,注释掉择不绘制底色
  ctx.setFillStyle('#000000');

  var minX = cavW;
  var minY = cavH;
  var maxX = 0;
  var maxY = 0;
  for (var i = 0; i < width; i++) {
    for (var j = 0; j < width; j++) {
      if (frame[j * width + i]) {
        ctx.fillRect(px * (4 + i) + offset, px * (4 + j) + offset, px, px);

        if (px * (4 + i) + offset < minX){
          minX = px * (4 + i) + offset
        }

        if (px * (4 + j) + offset < minY) {
          minY = px * (4 + j) + offset
        }

        if (px * (4 + i) + offset > maxX) {
          maxX = px * (4 + i) + offset
        }

        if (px * (4 + j) + offset > maxY) {
          maxY = px * (4 + j) + offset
        }

      }
    }
  }
  ctx.draw();

  var area = { minX: minX, minY: minY, maxX: maxX + px, maxY: maxY + px }
  
  return area
}

如何改成不止网址,还能多输入些信息比如姓名电话,扫码后显示输入的内容

组件中无法生成qrcode吗?

你好,我想问下这个在组件下可以生成qrcode吗?因为我想把生成二维码方法抽取出来作为组件
createQrCode: function (address, canvasId, cavW, cavH) {
let that = this;
QR.api.draw(address, canvasId, cavW, cavH, that);
setTimeout(() => { that.canvasToTempImage(); }, 1000);
}

这段代码是在组件component下写的,但是二维码似乎一直无法生成,如下图所示:
2018-04-08 20_11_38-wx_token - v1 02 1803210

因为看到你的源码说“新增$this参数,传入组件的this,兼容在组件中生成“,但是我传入进去了无法生成,所以想问下是我的用法有什么问题吗?不写在组件里是可以生成的,可以帮我看下是为啥吗?谢谢

二维码绘制问题

单独的二维码绘制单调,请问有无办法可以在二维码下加名字之类提示符呢

保存到相册是GIF

canvasToTempImage () {
    wepy.canvasToTempFilePath({
      canvasId: 'mycanvas',
      fileType: 'png' //此处已经设置png
    }).then((res) => {
      var tempFilePath = res.tempFilePath
      this.imagePath = tempFilePath
      this.$apply()
    })
  }

生成的二维码保存在相册是GIF格式

wechatimg8

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.