Java二維碼生成代碼
添加時間:2019-11-11 21:43:03
來源:
首先引入Jar包:
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.2.1</version>
</dependency>
然后開始擼代碼
package com.zxtg.zshop.common;
import java.awt.BasicStroke;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Hashtable;
import javax.imageio.ImageIO;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageConfig;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
public class MatrixToImageWriterEx {
private static final MatrixToLogoImageConfig DEFAULT_CONFIG = new MatrixToLogoImageConfig();
/**
* 根據(jù)內(nèi)容生成二維碼數(shù)據(jù)
* @param content 二維碼文字內(nèi)容[為了信息安全性,一般都要先進(jìn)行數(shù)據(jù)加密]
* @param width 二維碼照片寬度
* @param height 二維碼照片高度
* @return
*/
public static BitMatrix createQRCode(String content, int width, int height){
Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
//設(shè)置字符編碼
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
// 指定糾錯等級
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
BitMatrix matrix = null;
try {
matrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
} catch (WriterException e) {
e.printStackTrace();
}
return matrix;
}
/**
* 寫入二維碼、以及將照片logo寫入二維碼中
* @param matrix 要寫入的二維碼
* @param format 二維碼照片格式
* @param imagePath 二維碼照片保存路徑
* @param logoPath logo路徑
* @throws IOException
*/
public static void writeToFile(BitMatrix matrix, String format, String imagePath, String logoPath) throws IOException {
MatrixToImageWriter.writeToFile(matrix, format, new File(imagePath), new MatrixToImageConfig());
//添加logo圖片, 此處一定需要重新進(jìn)行讀取,而不能直接使用二維碼的BufferedImage 對象
BufferedImage img = ImageIO.read(new File(imagePath));
MatrixToImageWriterEx.overlapImage(img, format, imagePath, logoPath, DEFAULT_CONFIG);
}
/**
* 寫入二維碼、以及將照片logo寫入二維碼中
* @param matrix 要寫入的二維碼
* @param format 二維碼照片格式
* @param imagePath 二維碼照片保存路徑
* @param logoPath logo路徑
* @param logoConfig logo配置對象
* @throws IOException
*/
public static void writeToFile(BitMatrix matrix, String format, String imagePath, String logoPath, MatrixToLogoImageConfig logoConfig) throws IOException {
MatrixToImageWriter.writeToFile(matrix, format, new File(imagePath), new MatrixToImageConfig());
//添加logo圖片, 此處一定需要重新進(jìn)行讀取,而不能直接使用二維碼的BufferedImage 對象
BufferedImage img = ImageIO.read(new File(imagePath));
MatrixToImageWriterEx.overlapImage(img, format, imagePath, logoPath, logoConfig);
}
/**
* 將照片logo添加到二維碼中間
* @param image 生成的二維碼照片對象
* @param imagePath 照片保存路徑
* @param logoPath logo照片路徑
* @param formate 照片格式
*/
public static void overlapImage(BufferedImage image, String formate, String imagePath, String logoPath, MatrixToLogoImageConfig logoConfig) {
try {
BufferedImage logo = ImageIO.read(new File(logoPath));
Graphics2D g = image.createGraphics();
//考慮到logo照片貼到二維碼中,建議大小不要超過二維碼的1/5;
int width = image.getWidth() / logoConfig.getLogoPart();
int height = image.getHeight() / logoConfig.getLogoPart();
//logo起始位置,此目的是為logo居中顯示
int x = (image.getWidth() - width) / 2;
int y = (image.getHeight() - height) / 2;
//繪制圖
g.drawImage(logo, x, y, width, height, null);
//給logo畫邊框
//構(gòu)造一個具有指定線條寬度以及 cap 和 join 風(fēng)格的默認(rèn)值的實心 BasicStroke
g.setStroke(new BasicStroke(logoConfig.getBorder()));
g.setColor(logoConfig.getBorderColor());
g.drawRect(x, y, width, height);
g.dispose();
//寫入logo照片到二維碼
ImageIO.write(image, formate, new File(imagePath));
} catch (Exception e) {
e.printStackTrace();
}
}
}
最后我們調(diào)用QrcodeGenerator.encode方法一下:
package com.zxtg.zshop.util;
import java.awt.Color;
import java.awt.image.BufferedImage;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.zxtg.zshop.common.MatrixToImageWriterEx;
public class QrcodeGenerator {
public static BufferedImage encode(String content, int width, int height) {
try {
BitMatrix matrix = MatrixToImageWriterEx.createQRCode(content, width, height);
BufferedImage image = MatrixToImageWriter.toBufferedImage(matrix);
return image;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
————————————————
2019-11
首先引入Jar包:dependency groupIdcom.google.zxing/groupId artifactIdcore/artifactId version3.2.1/version/dependencydependency groupIdcom.googl…… [了解更多]
地 址:中國(上海)自由貿(mào)易試驗區(qū)臨港新片區(qū)平港路883-885號1幢
郵政編碼:201411
電 話:13761963296
郵 箱:847098433@qq.com
投訴郵 箱:info@xtvu.com