使用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%"/>觸發後臺生成二維碼,返回二維碼數據流直接在模態框顯示。
相關文章
相關標籤/搜索