工具类使用背景
- 为某个H5功能地址生成二维码方便推广。例如为每个产品或商品的H5介绍首页生成二维码。
- 为公司官网生成二维码并附带logo.
第三方依赖
<dependencies>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.4.1</version>
</dependency>
</dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
核心代码
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class QRCodeUtil {
public static void generate(QRCodeParams params, OutputStream outputStream) throws WriterException , IOException {
ImageIO.write(generate(params), params.getFormat(), outputStream);
}
private static BufferedImage generate(QRCodeParams params) throws WriterException{
Map<EncodeHintType,Object> hits = new HashMap<>(3);
hits.put(EncodeHintType.CHARACTER_SET,params.getCharset());
hits.put(EncodeHintType.MARGIN,1);
hits.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
BitMat