Maven
本次使用的Googel开源的ZXing来实现二维码的生成。
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.4.0</version>
</dependency>
生成二维码并保存到本地
public static void saveLocalQR() throws WriterException, IOException {
QRCodeWriter qrCodeWriter = new QRCodeWriter();
// hints是可选参数
Map<EncodeHintType, Object> hints = new HashMap<>(1);
// 容错率
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
// 字符集
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
// 第一个参数为二维码的内容 第二个参数不变 第三、四 个参数依次为 宽高
BitMatrix bitMatrix = qrCodeWriter.encode("https://xffjs.com", BarcodeFormat.QR_CODE, 500, 500, hints);
// 将二维码保存为 png 本地图片。
MatrixToImageWriter.writeToPath(bitMatrix, "png", Paths.get("E:\\qr2.png"));
}
hints是可选的参数,用于控制编码的字符集和纠错率。
生成Base64格式
public static void saveWriter() throws WriterException, IOException {
QRCodeWriter qrCodeWriter = new QRCodeWriter();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
// 第一个参数为二维码的内容 第二个参数不变 第三、四 个参数依次为 宽高
BitMatrix bitMatrix = qrCodeWriter.encode("https://baidu.com", BarcodeFormat.QR_CODE, 500, 500);
MatrixToImageWriter.writeToStream(bitMatrix, "png", byteArrayOutputStream);
byte[] bytes = byteArrayOutputStream.toByteArray();
String base64Image = new BASE64Encoder().encode(bytes);
System.out.println(base64Image);
}
动态生成
@Controller
@RequestMapping("/qr")
public class QRController {
@GetMapping("/felord")
public void gen(HttpServletResponse response) throws IOException, WriterException {
response.setContentType("image/png");
ServletOutputStream outputStream = response.getOutputStream();
outputStream.write(imageBytes());
outputStream.flush();
outputStream.close();
}
private byte [] imageBytes() throws IOException, WriterException {
QRCodeWriter qrCodeWriter = new QRCodeWriter();
Map<EncodeHintType, Object> hints = new HashMap<>();
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
hints.put(EncodeHintType.CHARACTER_SET,"UTF-8");
BitMatrix bitMatrix = qrCodeWriter.encode("https://xffjs.com", BarcodeFormat.QR_CODE, 80, 80,hints);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
MatrixToImageWriter.writeToStream(bitMatrix,"png",byteArrayOutputStream);
return byteArrayOutputStream.toByteArray();
}
}
注意事项
1、尽量避免在二维码中传递敏感的明文信息,应对其进行摘要处理或者脱敏。
2、对于比较长的网址应该使用短网址服务以减少二维码的信息载荷。
3、尽量保证二维码一定时间内的唯一性,比如加一些无意义随机值等。
4、其实也有其它一些功能强大开箱即用的的zxing二次封装库可用,比如 qrext4j
打赏
当前共有 0 条评论