筆記,谷歌Zxing二維碼,用數據流輸出到頁面顯示
二維碼一直都很流行,今日實踐了一下,需求是針對不同的參數生成地址鏈接二維碼,並展示在頁面上,如果採用生成圖片保存本地再返回相對路徑,會產生一堆垃圾圖片文件,還要後期清除實在是麻煩,想起登錄時的校驗碼可以直接將流輸出到頁面,故就異曲同工吧,少廢話直接上代碼。
項目是SpringMVC,maven管理
先導入谷歌的二維碼pom文件Zxing的依賴關係
<!-- 二維碼 --> <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.2.0</version> </dependency> <dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>3.2.0</version> </dependency>
頁面jsp顯示二維碼處:
<img class="q_code" src="${path}/tv/getQ?id=${id}" />
java controller代碼
@RequestMapping(value = "/getQ", method = { RequestMethod.POST, RequestMethod.GET })
public void getqcode(HttpServletResponse resp, String id) throws IOException {
String url = "要生成二維碼的地址"+id;
if (url != null && !"".equals(url)) {
ServletOutputStream stream = null;
try {
int width = 200;//圖片的寬度
int height = 200;//高度
stream = resp.getOutputStream();
QRCodeWriter writer = new QRCodeWriter();
BitMatrix m = writer.encode(url, BarcodeFormat.QR_CODE, height, width);
MatrixToImageWriter.writeToStream(m, "png", stream);
} catch (WriterException e) {
e.printStackTrace();
} finally {
if (stream != null) {
stream.flush();
stream.close();
}
}
}
}
最後當頁面加載的時候會去執行img標籤內的src請求返回圖片流並展示。