zxing框架生成二維碼
1.1 實現思路
- 在idea中搭建web專案
- 配置依賴jar包
- 定義控制器類
- 使用zxing核心api生成二維碼
1.2 開發步驟
1.2.1 配置依賴jar
<!-- 配置二維碼生成的框架 -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId
><version>3.1.0</version>
</dependency>
1.2.2開發BarCodeController控制器
@Controller
public class BarCodeController {
/** 定義二維碼圖片的寬度 */
private static final int WIDTH = 250;
/** 定義二維碼圖片的高度
*/private static final int HEIGHT = 250;
/** 定義LOGO圖片的寬度 */
private static final int LOGO_WIDTH = 80;
/** 定義LOGO圖片的高度 */
private static final int LOGO_HEIGHT = 80;
/** 生成二維碼的方法 */
@GetMapping
("/barcode")public void execute(@RequestParam(value="url", required=false)String url,
HttpServletResponse response) throws Exception{
/** 判斷二維碼中URL */
if (url == null || "".equals(url)){
url = "http://www.jd.com";
}
/** 定義Map集合封裝二維碼配置資訊 */
Map<EncodeHintType, Object> hints = new HashMap<>();
/** 設定二維碼圖片的內容編碼 */
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
/** 設定二維碼圖片的上、下、左、右間隙 */
hints.put(EncodeHintType.MARGIN, 1);
/** 設定二維碼的糾錯級別 */
hints.put(EncodeHintType.ERROR_CORRECTION,
ErrorCorrectionLevel.H);
/**
* 建立二維碼位元組轉換物件
* 第一個引數:二維碼圖片中的內容
* 第二個引數:二維碼格式器
* 第三個引數:生成二維碼圖片的寬度
* 第四個引數:生成二維碼圖片的高度
* 第五個引數:生成二維碼需要配置資訊
* */
BitMatrix matrix = new
MultiFormatWriter().encode(url,
BarcodeFormat.QR_CODE, WIDTH, HEIGHT, hints);
/** 獲取二維碼圖片真正的寬度 */
int matrix_width = matrix.getWidth();
/** 獲取二維碼圖片真正的高度 */
int matrix_height = matrix.getHeight();
/** 定義一張空白的緩衝流圖片 */
BufferedImage image = new
BufferedImage(matrix_width, matrix_height,
BufferedImage.TYPE_INT_RGB);
/** 把二維碼位元組轉換物件 轉化 到緩衝流圖片上 */
for (int x = 0; x < matrix_width; x++){
for (int y = 0; y < matrix_height; y++){
/** 通過x、y座標獲取一點的顏色 true: 黑色 false: 白色 */
int rgb = matrix.get(x, y) ? 0xFF1493 : 0xFFFFFF;
image.setRGB(x, y, rgb);
}
}
/** 獲取公司logo圖片 */
BufferedImage logo = ImageIO.read(new File(
this.getClass().getResource("/17.jpg").getPath()));
/** 獲取緩衝流圖片的畫筆 */
Graphics2D g = (Graphics2D)image.getGraphics();
/** 在二維碼圖片中間繪製公司logo */
g.drawImage(logo, (matrix_width - LOGO_WIDTH) / 2,
(matrix_height - LOGO_HEIGHT) / 2,
LOGO_WIDTH, LOGO_HEIGHT, null);
/** 設定畫筆的顏色 */
g.setColor(Color.WHITE);
/** 設定畫筆的粗細 */
g.setStroke(new BasicStroke(5.0f));
/** 設定消除鋸齒 */
g.setRenderingHint(RenderingHints
.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
/** 繪製圓角矩形 */
g.drawRoundRect((matrix_width - LOGO_WIDTH) / 2,
(matrix_height - LOGO_HEIGHT) / 2,
LOGO_WIDTH, LOGO_HEIGHT, 10, 10);
/** 向瀏覽器輸出二維碼 */
ImageIO.write(image, "png",
response.getOutputStream());
}
}
1.2.3 提供html頁面
<!DOCTYPE html>
<html>
<head>
<title>二維碼</title>
<meta charset="UTF-8"/>
<meta http-equiv="pragma" content="no-cache"/>
<style type="text/css">
body{
background-color : black;
}
</style>
</head>
<body>
<img alt="二維碼"
src="barcode?url=https://www.baidu.com"
width="200" height="200"/>
</body>
</html>