在浏览器页面上生成二维码的两种方式

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();
        }
    }

后台生成的优缺点:
优点:可以快速生成很长字符串的二维码,并不会出现识别不出来的情况
缺点:当访问量大的时候,对服务器的压力较大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值