java生成二维码有许多方式,本文以谷歌zxing项目为例,简单讲一下如何使用。
引入依赖
以maven项目为例,在pom文件中引入zxing的依赖:
<!-- 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.3.3</version>
</dependency>
创建二维码工具类
在已引入zxing依赖的基础上,创建一个二维码工具类:
package cn.logicark.zxing;
import com.google.zxing.*;
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 com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.util.HashMap;
/**
* 二维码工具类
* Created by LogicArk on 2020/6/7.
*/
public class QRCodeUtil {
/** 默认宽度 */
private static int defaultWidth = 300;
/** 默认高度 */
private static int defaultHeight = 300;
/** 默认图片格式 */
private static String defaultImageFormat = "png";
public static void main(String[] args){
String content = "https://blog.csdn.net/ljz1408";
String filePath = "D:/test/qrcode.png";
generateQRCode(content ,filePath);
readQRCode(filePath);
}
/**
* 生成二维码
* @param content 内容
* @param filePath 文件路径
*/
public static void generateQRCode(String content ,String filePath){
generateQRCode(defaultWidth ,defaultHeight ,defaultImageFormat ,content ,filePath);
}
/**
* 生成二维码
* @param width 宽度
* @param height 高度
* @param imageFormat 图片格式
* @param content 内容
* @param filePath 文件路径
*/
public static void generateQRCode(int width ,int height,String imageFormat ,String content ,String filePath){
//定义二维码参数
HashMap hints = new HashMap();
hints.put(EncodeHintType.CHARACTER_SET , "utf-8");
hints.put(EncodeHintType.ERROR_CORRECTION , ErrorCorrectionLevel.M);
hints.put(EncodeHintType.MARGIN ,2);
try {
BitMatrix bitMatrix = new MultiFormatWriter().encode(content , BarcodeFormat.QR_CODE ,width ,height,hints);
Path file = new File(filePath).toPath();
MatrixToImageWriter.writeToPath(bitMatrix ,imageFormat ,file);
} catch (WriterException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 读取二维码
* @param filePath 文件路径
*/
public static void readQRCode(String filePath){
try{
MultiFormatReader formatReader = new MultiFormatReader();
File file = new File(filePath);
BufferedImage image = ImageIO.read(file);
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));
//定义二维码的参数
HashMap hints = new HashMap();
hints.put(EncodeHintType.CHARACTER_SET ,"utf-8");
Result result = formatReader.decode(binaryBitmap ,hints);
System.out.println("解析结果:" + result.toString());
System.out.println("二维码格式:" + result.getBarcodeFormat());
System.out.println("二维码文本内容:" + result.getText());
} catch (NotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
生成的二维码如下(可以扫描试试效果):