1、使用JS生成
JS生成二维码有很多第三方的开源库可以使用,我这里使用的是jquery-qrcode,下载源码,导入js,需要导入:jquery.min.js,jquery.qrcode.js, qrcode.js这三个文件。我的如下:
<script src="http://libs.baidu.com/jquery/1.3.2/jquery.min.js"></script>
<script src="./myjs/jquery.qrcode.js"></script>
<script src="./myjs/qrcode.js"></script>
调用代码如下:
//table方式可兼容低版本IE浏览器,主流浏览器的话可以使用"canvas"参数
jQuery('#qrcodeTable').qrcode({
render : "table",
text : "test"
});
...
<div id="qrcodeTable" class="qrcode">
...
当字符太长的话需要对二维码的长度和宽度进行扩大才能够扫码识别出来,可以修改jquery.qrcode.js文件里面的内容:
options = $.extend( {}, {
render : "canvas",
width : 500,//可改变二维码的宽度
height : 500,//可改变二维码的高度
typeNumber : -1,
correctLevel : QRErrorCorrectLevel.L,
background : "#ffffff",
foreground : "#000000"
}, options);
客户端生成的优缺点:
优点:由于是在客户端生成的,不会对服务器造成压力
缺点:当字符串太长,生成的二维码很难识别出来甚至是识别不出来。table方式生成的速度很慢,特别是长字符。
2、在后台生成
后台我使用的QRGen,当然,如果懒的话可以从这里下载,我也抽取出jar包了。
在后台生成的话需要把生成的二维码图片数据流传输到浏览器上,有两种方式:一种是把图片保存到服务器的文件目录上,然后使用
<img src="qrcodeImgUrl">
另外一种是直接访问Action获取到数据流
<src="./namespace/olqrcode!outQrCode">
outQrcode方法的功能就是生成二维码图片数据流然后输出到客户端
//java
public void outQrCode(){
ByteArrayOutputStream outStream =
QRCode.from(qrcodeUrl)
.to(ImageType.JPG)
.withSize(600, 600).stream();
byte[] data = outStream.toByteArray();
try {
OutputStream out = ServletActionContext.getResponse().getOutputStream();
out.write(data);
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
后台生成的优缺点:
优点:可以快速生成很长字符串的二维码,并不会出现识别不出来的情况
缺点:当访问量大的时候,对服务器的压力较大