前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Java的二维码生成和解析

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

作者头像
全栈开发日记
发布2022-05-13 14:49:10
5610
发布2022-05-13 14:49:10
举报
文章被收录于专栏:全栈开发日记

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,等级越高存储的内容越少,但更容易被识别,这是因为纠错等级越高,他的内容会被重复存储在二维码内容中,也就是说,即使是被遮挡了一部分还是可以被识别成功

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈开发日记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1-POM依赖
  • 2-创建二维码的工具类
  • 3-调用传参详解
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档