基于Java的二维码生成和解析

2022-05-13 14:49:10 浏览数 (1)

Java生成二维码的方式有很多,这里基于谷歌的zxing做演示。

使用zxing的好处在于方便zxingjar包可在Maven中央仓库找到并依赖到本地。

而像QRCode并不能直接依赖到本地,需要自行下载jar包然后安装到本地Maven仓库,相对多了一道程序。

下面是使用zxing的项目流程:供参考

1-POM依赖

代码语言:javascript复制
<!-- 谷歌二维码生成-->
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>core</artifactId>
    <version>3.4.1</version>
</dependency>
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>javase</artifactId>
    <version>3.4.1</version>
</dependency>

2-创建二维码的工具类

封装二维码的工具类是为了方便以后在其他项目中再次使用。

工具类代码较多,放在文章内影响阅读,公众号后台回复【zxing工具类】获取工具类源码。

部分代码如下:供参考

代码语言:javascript复制
/**
 * @param content 内容
 * @param imgPath LOGO图片
 * @param destPath 存储路径
 * @param needCompress 是否压缩
 * @author 二饭
 * @email 1786705138@qq.com
 */
public String encodeTest(String content, String imgPath, String destPath,boolean needCompress)throws Exception{
    Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
    hints.put(EncodeHintType.ERROR_CORRECTION, this.Level);// 纠错等级,越高存储越多,越不易被识别
    hints.put(EncodeHintType.CHARACTER_SET, CHARSET);// 编码字符集
    hints.put(EncodeHintType.MARGIN, this.MARGIN);// 设置白边边缘

    // 创建位矩阵对象 内容、图片类型、宽度、高度、
    BitMatrix bitMatrix = new MultiFormatWriter().encode(content,BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE, hints);

    // 获取宽度高度
    int width = bitMatrix.getWidth();
    int height = bitMatrix.getHeight();

    // 生成图像
    BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
    for (int x = 0; x < width; x  ) {
        for (int y = 0; y < height; y  ) {
            image.setRGB(x, y, bitMatrix.get(x, y) ? this.COLOR
                    : this.BGC);
        }
    }

    mkdirs(destPath);
    String file = System.currentTimeMillis() ".jpg";
    ImageIO.write(image, FORMAT_NAME, new File(destPath "/" file));
    return file;
}

3-调用传参详解

工具类中可供设置的参数为:内容编码格式图片格式二维码尺寸LOGO尺寸前景色后景色二维码边缘纠错等级二维码保存地址

编码格式:默认为UTF-8,可选ASCIIGB2312

图片格式:默认为JPG,可选PNG

二维码尺寸:默认为300,建议100-1000,太小影响使用,太大影响程序执行效率

LOGO尺寸:二维码图片中间的LOGO图片,默认会压缩,如果觉得自己图片比较小,可选择不压缩

前景色:常见二维码的黑色部分

后景色:常见二维码的白色部分

二维码边缘:二维码白色边缘的宽度

纠错等级:纠错等级影响识别效率,分为L < M < Q <H,等级越高存储的内容越少,但更容易被识别,这是因为纠错等级越高,他的内容会被重复存储在二维码内容中,也就是说,即使是被遮挡了一部分还是可以被识别成功

如下是生成的无边缘二维码:

0 人点赞