本篇文章將介紹java中如何生成二維碼,二維碼的展現主要包括兩各方面:
1.直接生成圖片(直接生成圖片不須要web程序,maven工程便可)
2.將二維碼轉爲字節數組,而後在web頁面顯示。web項目的目錄結構之前面的一篇文章中的目錄結構爲基礎(傳送門)。javascript
1.添加Zxing的依賴(maven工程爲例)css
<dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.3.0</version> </dependency> <dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>3.3.0</version> </dependency>
2.保存信息爲二維碼圖片html
名爲generateQRCodeImage方法,將字符串封裝成二維碼、設置二維碼的寬度和高度、聲明二維碼保存的路徑與圖片名稱。java
package org.thinkingingis.utils; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.file.FileSystems; import java.nio.file.Path; import com.google.zxing.BarcodeFormat; import com.google.zxing.WriterException; import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; public class QRCodeGenerator { private static final String QR_CODE_IMAGE_PATH = "/Users/gisboy/Desktop/MyQRCode.png"; private static void generateQRCodeImage(String text, int width, int height, String filePath) throws WriterException, IOException { QRCodeWriter qrCodeWriter = new QRCodeWriter(); BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height); Path path = FileSystems.getDefault().getPath(filePath); MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path); } public static void main(String[] args) { try { generateQRCodeImage("This is my first QR Code", 350, 350, QR_CODE_IMAGE_PATH); } catch (WriterException e) { System.out.println("Could not generate QR Code, WriterException :: " + e.getMessage()); } catch (IOException e) { System.out.println("Could not generate QR Code, IOException :: " + e.getMessage()); } } }
上面的代碼將會生成一個內容爲「This is my first QR Code」二維碼,並保存在桌面,以下圖:jquery
上面的方法是將二維碼保存爲圖片,若是你不想將二維碼保存爲圖片,也能夠將其保存爲字節數組,能夠用zxing 庫提供的MatrixToImageWriter.writeToStream()方法:web
public static byte[] getQRCodeImage(String text, int width, int height) throws WriterException, IOException { QRCodeWriter qrCodeWriter = new QRCodeWriter(); BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height); ByteArrayOutputStream pngOutputStream = new ByteArrayOutputStream(); MatrixToImageWriter.writeToStream(bitMatrix, "PNG", pngOutputStream); byte[] pngData = pngOutputStream.toByteArray(); return pngData; }
這個方法能夠將字節數組在web頁面展現爲圖片形式。結合Spring Boot + Thymeleaf搭建的web工程,若是想在頁面顯示該二維碼信息的話,須要在html頁面和controller中完成以下代碼:bootstrap
qrcode.html數組
<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head> <link rel="stylesheet" type="text/css" href="webjars/bootstrap/3.3.7/css/bootstrap.min.css"/> <script type="text/javascript" src="webjars/jquery/2.2.4/jquery.min.js"></script> </head> <body> <div th:replace="fragments/header :: header"></div> <div class="container"> <div class="starter-template"> <h1>QrCodeImage</h1> </div> </div> <div class="container"> <img alt="qrcode" th:src="@{'/qrimage'}" /> <footer> <p> © <a >ThinkingInGIS</a> 2019 </p> </footer> </div> </body> </html>
DefaultController.javaapp
@GetMapping("qrcode") public String qrcode() { return "/qrcode"; } @GetMapping(value="/qrimage") public ResponseEntity<byte[]> getQRImage() { //二維碼內的信息 String info = "This is my first QR Code"; byte[] qrcode = null; try { qrcode = QRCodeGenerator.getQRCodeImage(info, 360, 360); } catch (WriterException e) { System.out.println("Could not generate QR Code, WriterException :: " + e.getMessage()); e.printStackTrace(); } catch (IOException e) { System.out.println("Could not generate QR Code, IOException :: " + e.getMessage()); } // Set headers final HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.IMAGE_PNG); return new ResponseEntity<byte[]> (qrcode, headers, HttpStatus.CREATED); }
請注意qrcode.html中<img>標籤中 src屬性的值。maven