最近有個需求是在頁面爲當前數據生成二維碼。函數
由於是以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%"/>觸發後臺生成二維碼,返回二維碼數據流直接在模態框顯示。