maven
<!-- https://mvnrepository.com/artifact/com.google.zxing/core -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.zxing/javase -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.16</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
</dependency>
代码
import cn.hutool.core.io.FileUtil;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import javax.imageio.ImageIO;
import lombok.extern.log4j.Log4j2;
@Log4j2
public class QRCodeUtil {
static String format = "png";
static int width = 300;
static int height = 300;
public static void main(String[] args) {
QrEncode("内容", new File("该更成你要的地址"));
String qrDecode = QrDecode(new File("该更成你要的地址"));
System.out.println(qrDecode);
}
public static String QrDecode(String filePath) {
return QrDecode(new File(filePath));
}
public static String QrDecode(File file) {
BufferedImage image = null;
try {
image = ImageIO.read(file);
BinaryBitmap binaryBitmap = new BinaryBitmap(
new HybridBinarizer(new BufferedImageLuminanceSource(image)));
Result result = new MultiFormatReader().decode(binaryBitmap);
return result.getText();
} catch (Exception e) {
log.error("二维码解码失败:{}", e);
}
return null;
}
public static void QrEncode(String content, String filePath) {
QrEncode(width, height, content, new File(filePath));
}
public static void QrEncode(String content, File file) {
QrEncode(width, height, content, file);
}
public static void QrEncode(int width, int height, String content, File file) {
if (Objects.isNull(file)) {
new RuntimeException("file cannot be null");
}
boolean pathEndsWith = FileUtil.pathEndsWith(file, format);
if (!pathEndsWith) {
new RuntimeException("format must be png");
}
Map<EncodeHintType, Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
try {
BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE,
width, height, hints);
MatrixToImageWriter.writeToStream(bitMatrix, format, new FileOutputStream(file));
} catch (Exception e) {
log.error("二维码生成失败:{}", e);
}
}
}