二維碼在生活中無處不在,之前我也使用過java的zxing庫(kù)生成過二維碼,功能很強(qiáng)大。
但是其實(shí)nodejs上也有很多第三方庫(kù)能夠生成二維碼。今天我們就是使用qrcode這個(gè)庫(kù)來生成二維碼。
生成二維碼:
const qrCode = require('qrcode') class QrController { async create (ctx) { const { text = 'Luban', options } = ctx.request.body const qrOptions = { type: 'image/png', width: 180, margin: 0, scale: 1, color: { dark: '#000000', light: '#ffffff' }, errorCorrectionLevel: 'M', quality: 1 } Object.assign(qrOptions, options) const imgData = await qrCode.toDataURL(text, qrOptions) return ctx.success({ imgData }) } } module.exports = new QrController()
下載二維碼:
const a = document.createElement('a') const event = new MouseEvent('click') a.download = '二維碼' a.href = this.imgSrc a.dispatchEvent(event)
主要參數(shù)解釋
type: 生成圖片類型
主要包括 image/png
、image/jpeg
、 image/web
這三種類型.
ps: 但是我在代碼中即使設(shè)置type為image/jpeg
,發(fā)現(xiàn)生成的圖片還是png,后來仔細(xì)閱讀文檔才知道toDataURL這個(gè)方法只支持生成png類型的圖片…
width: 二維碼的寬度
發(fā)現(xiàn)沒有height字段設(shè)置,可能是生成的二維碼都是正方形吧
margin: 內(nèi)邊距
內(nèi)邊距設(shè)置為10
內(nèi)邊距設(shè)置為0
scale 放縮的倍數(shù)
如果設(shè)置了width,優(yōu)先生效width,則此參數(shù)無用.
放縮比例為5
放縮比例為10
color.light: 前景色
color.night: 背景色
默認(rèn)的前景色是黑色,背景色為白色。
errorCorrectionLevel 糾錯(cuò)級(jí)別
二維碼即使有部分顯示不了,依然可以識(shí)別出二維碼的內(nèi)容,這就是二維碼的糾錯(cuò)。
L級(jí)別的糾錯(cuò)代表只要?dú)埲倍刃∮?%,就可以被識(shí)別出,以此類推