使用nodeJs 生成二维码

二维码的生成,以及在二维码中间添加图片

nodeJs 生成二维码

nodeJs 生成二维码的库有:

1
2
1、qrcode [github](https://github.com/soldair/node-qrcode)
2、qr-image [github](https://github.com/alexeyten/qr-image)

介绍使用 qr-image 生成二维码

优点

1
2
3
不需要任何依赖库
可生成png、svg、eps、pdf格式的图片
支持UTF_8编码

Usage:

1
$ npm install qr-image
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
介绍:
//引入qr-image module
var qr = require('qr-image');
//生成‘https://leibosite.github.io’信息、png类型的二维码,默认为M
var qr_svg = qr.image('https://leibosite.github.io', { type: 'png' });
//将二维码输出到文件流,并生成github.png文件
qr_svg.pipe(require('fs').createWriteStream('github.png'));
完整代码:
var generatorQrImage = function(qrInfo,qrPath){
var qr_svg = qr.image(qrInfo, 'H',{ type: 'png' });
var qrPa = path.join(__dirname,qrPath);
qr_svg.pipe(fs.createWriteStream(qrPa));
fs.exists(qrPa,function(isExist){
if(isExist){
console.log('generator success!');
}
console.log('generator fail');
});
};

githubQr

但是这远远达不到我们的审美观,我们使用的二维码都是很炫丽的,比如:微信、支付宝,最显著的特征是在二维码中间有一个小图片,这个小图片是怎么加上去的呢?加上这个图片会对我们生成的二维码有什么影响呢?带着问题去看看二维码的原理,参考:二维码的生成细节和原理二维码为什么缺了一块依然可以扫出来。从这两篇文章中我们了解到:二维码的原理可以都简单概括为:在矩阵相应元素位置上用“点”表示二进制“1”, 用“空”表示二进制“0”,“点”和“空”的排列组成代码。现在我们大家所看到的二维码绝大多数是“QR码”,QR码是“Quick Response”(快速反应)的缩写,日本Denso-Wave公司发明。之所以QR码缺一部分或者被遮盖一部分也能被正确扫描,要归功于QR码在发明时的“容错度”设计,生成器会将部分信息重复表示(也就是冗余)来提高其容错度。QR码在生成时可以选择四种程度的容错度(可修正的字码量),分别是L,M,Q,H,对应7%,15%,25%,30%的容错度。也就是说,如果你在生成二维码时选择H档容错度,即使30%的图案被遮挡,也可以被正确扫描。这也就是为什么现在许多二维码中央都可以加上LOGO。

定制个性化二维码

既然我们已经了解了这些,那就开始动手定制个性化的二维码,代码实现时需要借助gm,帮助我们实现composite两张图片(以下是在mac上的环境安装)

1
2
3
$ brew install imagemagick
$ brew install graphicsmagick
$ npm install gm

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
var smallPath = path.join(__dirname,'../public/images/headImage.png');
var githubQr = path.join(__dirname,'../public/images/githubQr.png');
var headImageRes = path.join(__dirname,'../public/images/headImageRes.png');
var logoWidth = 50;
//将我们的logo resize到 50x50
gm(smallPath)
.resize(logoWidth)
.noProfile()
.write(headImageRes,function(err){
if(err){
console.log(err.message);
}
console.log('resize success');
var qrImage = gm(githubQr);
var githubPictureQr = path.join(__dirname,'../public/images/githubPicture.png');
//获取二维码的尺寸,并将resize 后的logo复合到二维码中间位置
qrImage.size(function(err,value){
if(!err && value){
var geometryStr = '+' + (value.width/2 - logoWidth/2) + '+' +((value.height/2 - logoWidth/2)) ;
qrImage
.composite(headImageRes)
.geometry(geometryStr)
.write(githubPictureQr,function(err){
if(err){
console.log('gm error!');
console.log(err.message);
}
console.log('composite success');
});
} else if(err){
console.log('size error!');
console.log(err.message);
}
});
});

效果如下:
二维码加logo图片

文章目录
  1. 1. nodeJs 生成二维码
    1. 1.1. nodeJs 生成二维码的库有:
  2. 2. 介绍使用 qr-image 生成二维码
    1. 2.1. 优点
    2. 2.2. Usage:
    3. 2.3. 定制个性化二维码
,