使用qr生成二维码

  最近有个需求是在页面为当前数据生成二维码。函数

  由于是以Java为开发语言,因此我选择了QRCode.jar这个第三方插件,首先下载qrcode.jar这个包,而后写一个生成二维码的工具类,这个类是参照别人的,更具需求修改了参数,代码以下:工具

public class EncodeUtil {
    private static final long serialVersionUID = 1L;
    public static byte[] createImage(String content) throws UnsupportedEncodingException {
        Qrcode qrcode = new Qrcode();
        qrcode.setQrcodeErrorCorrect('M');
        qrcode.setQrcodeEncodeMode('B');
        qrcode.setQrcodeVersion(15);
        //content为须要生成的字符串,可经过请求传入参数
        byte[] bstr = content.getBytes("UTF-8");
        BufferedImage bi = new BufferedImage(178, 178, BufferedImage.TYPE_INT_RGB);
        Graphics2D g = bi.createGraphics();
        g.setBackground(Color.WHITE);   //背景颜色
        g.clearRect(0, 0, 178, 178);
        g.setColor(Color.BLACK);    //条码颜色
        System.out.println(bstr.length);
        if (bstr.length > 0 && bstr.length < 500) {
            boolean[][] b = qrcode.calQrcode(bstr);
            for (int i = 0; i < b.length; i++) {
                for (int j = 0; j < b.length; j++) {
                    if (b[j][i]) {
                        g.fillRect(j * 2 + 2, i * 2 + 2, 2, 2);
                    }
                }
            }
        }
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
        try {
            encoder.encode(bi);
        } catch (ImageFormatException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return os.toByteArray();
    }
}

这里特别注意一下本身的需求,在个人需求中二维码的数据会是300左右的字节,因此对测试

qrcode.setQrcodeVersion(15)进行了对应的设置,由于网上的讲解不是很全面不少,我也是测试了好几回才把这个参数设置得知足个人需求,下面的参数设置我没怎么修改,请自行搜索。
而后是调用这个工具类:
public class Test {


    private InputStream inputStream;

    public InputStream encode(){
        
        byte[] image = new byte[1024];
       
        try {
            image= EncodeUtil.createImage("test");
        }catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        this.inputStream = new ByteArrayInputStream(image);
        return inputStream;
    }
}

这里是返回的数据流,直接返回会在新的页面返回二维码,而个人需求是将二维码以弹出框的形式弹出,因此这里我使用了模态框;this

点击按钮,调用触发模态框的函数:spa

$("#mymodle").modal('show');
而后在模态框的主体内直接
<img src="××.do/>" style="position:absolute;top: 40%;left: 50%"/>触发后台生成二维码,返回二维码数据流直接在模态框显示。