Java生成二维码的两种方法

这篇具有很好参考价值的文章主要介绍了Java生成二维码的两种方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文介绍Java生成二维码的两种方法,这两种方法都依赖于google提供的二维码依赖包。
一种是自己写工具类,代码可以网上抄。
另一种是使用hutool第三方工具类的依赖包,不用自己抄代码。

一、自定义工具类

自定义工具包就是借助google生成二维码的依赖包,然后自己写工具类。

<!-- 生成二维码核心组件 -->
<dependency>
 <groupId>com.google.zxing</groupId>
  <artifactId>core</artifactId>
  <version>3.4.1</version>
</dependency>
<!-- 非web应用无需导入javase依赖包 -->
<dependency>
  <groupId>com.google.zxing</groupId>
  <artifactId>javase</artifactId>
  <version>3.4.1</version>
</dependency>

工具类

public class MyQrCodeUtil {

    //CODE_WIDTH:二维码宽度,单位像素
    private static final int CODE_WIDTH = 400;
    //CODE_HEIGHT:二维码高度,单位像素
    private static final int CODE_HEIGHT = 400;
    //FRONT_COLOR:二维码前景色,0x000000 表示黑色
    private static final int FRONT_COLOR = 0x000000;
    //BACKGROUND_COLOR:二维码背景色,0xFFFFFF 表示白色
    //演示用 16 进制表示,和前端页面 CSS 的取色是一样的,注意前后景颜色应该对比明显,如常见的黑白
    private static final int BACKGROUND_COLOR = 0xFFFFFF;

    public static void createCodeToFile(String content, File codeImgFileSaveDir, String fileName) {
        try {
            if (StringUtils.isBlank(content) || StringUtils.isBlank(fileName)) {
                return;
            }
            content = content.trim();
            if (codeImgFileSaveDir==null || codeImgFileSaveDir.isFile()) {
                //二维码图片存在目录为空,默认放在桌面...
                codeImgFileSaveDir = FileSystemView.getFileSystemView().getHomeDirectory();
            }
            if (!codeImgFileSaveDir.exists()) {
                //二维码图片存在目录不存在,开始创建...
                codeImgFileSaveDir.mkdirs();
            }

            //核心代码-生成二维码
            BufferedImage bufferedImage = getBufferedImage(content);

            File codeImgFile = new File(codeImgFileSaveDir, fileName);
            ImageIO.write(bufferedImage, "png", codeImgFile);

            System.out.println("二维码图片生成成功:" + codeImgFile.getPath());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 生成二维码并输出到输出流, 通常用于输出到网页上进行显示,输出到网页与输出到磁盘上的文件中,区别在于最后一句 ImageIO.write
     * write(RenderedImage im,String formatName,File output):写到文件中
     * write(RenderedImage im,String formatName,OutputStream output):输出到输出流中
     * @param content  :二维码内容
     * @param outputStream :输出流,比如 HttpServletResponse 的 getOutputStream
     */
    public static void createCodeToOutputStream(String content, OutputStream outputStream) {
        try {
            if (StringUtils.isBlank(content)) {
                return;
            }
            content = content.trim();
            //核心代码-生成二维码
            BufferedImage bufferedImage = getBufferedImage(content);

            //区别就是这一句,输出到输出流中,如果第三个参数是 File,则输出到文件中
            ImageIO.write(bufferedImage, "png", outputStream);

            System.out.println("二维码图片生成到输出流成功...");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //核心代码-生成二维码
    private static BufferedImage getBufferedImage(String content) throws WriterException {

        //com.google.zxing.EncodeHintType:编码提示类型,枚举类型
        Map<EncodeHintType, Object> hints = new HashMap();

        //EncodeHintType.CHARACTER_SET:设置字符编码类型
        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");

        //EncodeHintType.ERROR_CORRECTION:设置误差校正
        //ErrorCorrectionLevel:误差校正等级,L = ~7% correction、M = ~15% correction、Q = ~25% correction、H = ~30% correction
        //不设置时,默认为 L 等级,等级不一样,生成的图案不同,但扫描的结果是一样的
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);

        //EncodeHintType.MARGIN:设置二维码边距,单位像素,值越小,二维码距离四周越近
        hints.put(EncodeHintType.MARGIN, 1);

        MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
        BitMatrix bitMatrix = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, CODE_WIDTH, CODE_HEIGHT, hints);
        BufferedImage bufferedImage = new BufferedImage(CODE_WIDTH, CODE_HEIGHT, BufferedImage.TYPE_INT_BGR);
        for (int x = 0; x < CODE_WIDTH; x++) {
            for (int y = 0; y < CODE_HEIGHT; y++) {
                bufferedImage.setRGB(x, y, bitMatrix.get(x, y) ? FRONT_COLOR : BACKGROUND_COLOR);
            }
        }
        return bufferedImage;
    }

}

测试代码

public class App 
{
    public static void main( String[] args )
    {
        //使用自定义工具包生成二维码
        File myUtilFileDir = new File("E:\\files");
        MyQrCodeUtil.createCodeToFile("123",myUtilFileDir,"qrcode1.png");
    }
}

二、使用第三方工具类

hutool-all依赖包已经封装好了一个生成二维码的工具类,但他同样依赖于google提供的生成二维码的依赖包。

<dependency>
 <groupId>cn.hutool</groupId>
  <artifactId>hutool-all</artifactId>
  <version>5.8.12</version>
</dependency>

测试代码

public class App 
{
    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );

        //使用自定义工具包生成二维码
        File myUtilFileDir = new File("E:\\files");
        MyQrCodeUtil.createCodeToFile("123",myUtilFileDir,"qrcode1.png");

        //使用hutool工具包生成二维码
        File hutoolFile = new File("E:\\files\\qrcode2.png");
        QrConfig qrConfig = QrConfig.create();
        qrConfig.setBackColor(Color.WHITE);
        qrConfig.setForeColor(Color.BLACK);
        QrCodeUtil.generate("123", qrConfig,hutoolFile);
    }
}

关于生成二维码的一些讨论

前端生成二维码还是后端生成二维码

在后端生成二维码,和传送二维码给前端其实都是对服务器有压力的做法,所以一般情况下我觉得将二维码的内容传递给前端,交给前端生成比较好,降低服务器压力,减小传输成本。
不过,如果二维码内容信息敏感,比如用户的关键数据,支付信息,支付凭证,密钥之类的,则不应该传递给前端生成。

致谢

Java生成二维码的几种实现方式(基于Spring Boot)
com.google.zxing 二维码生成与解析

对你有帮助吗?点个赞把~文章来源地址https://www.toymoban.com/news/detail-464285.html

到了这里,关于Java生成二维码的两种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序转二维码两种方法

    第一种方法: 首先,你需要在电脑上打开https://mp.weixin.qq.com注册一个个人微信订阅号, 其次,登陆微信电脑版,微信号关注你注册的订阅号,这是重点 注册好了,接下来就是详细步骤** 1 首页 - 新建群发 - 选择自建图文 - 最上边点 小程序 2 选择你要转码的小程序名字或者微

    2024年02月11日
    浏览(14)
  • 【支付系统】java springboot 生成二维码,二维码中文乱码

            支付系统必不可少的就是生成二维码,有时我们会需要将支付链接转换为二维码.用户通过移动设备扫描二维码调起支付. 该篇文章主要使用的是hutool自带的二维码生成功能.  1. 引入依赖(hutool 可以按需引入这里就直接使用all了) 2. hutool的官方已经有很详细的生成方式

    2024年02月11日
    浏览(17)
  • Vue中qrcode的使用方法(生成二维码插件) / 前端页面根据URL链接生成二维码

    1.下载 npm install qrcode --save-dev 2.引入(在所需要的页面中引入) import QRCode from “qrcode”; //引入生成二维码插件 3.生成二维码 作者:微微一笑绝绝子 出处:Vue中qrcode的使用方法(生成二维码插件) / 前端页面根据URL链接生成二维码 - 微微一笑绝绝子 - 博客园 本博客文章均为作者

    2024年02月15日
    浏览(21)
  • java实现二维码生成功能

    由于现在对二维码的使用比较多,正好我在项目里面也使用到了,所以写篇博客记录一下。 这里我是将我博客主页的url生成二维码,微信扫一扫可以看到我的博客主页(欢迎骚扰) 4.1、设置参数 上面这个只是简单的生成二维码,接下来说说自定义参数的方式生成,如长、宽

    2024年02月11日
    浏览(22)
  • Java生成二维码——附Utils工具类

    参加2023年的计算机设计大赛国赛,拿到了一等奖。 现在将项目中的工具类代码剥离出来,方便之后项目开发中复用。

    2024年02月15日
    浏览(14)
  • Java便捷生成二维码并使用Excel

    第一步生成图片字节数组输出流 第二步字节数组输出流存入excel 使用的是easyexcel和hutool工具便捷快速开发 导出类信息 @ContentRowHeight(100) @ColumnWidth(100/6) 这两个注解是条件excel行列大小,可以自行调整 EasyExcel 会根据这个实体类来生成表格,可以去官网查看注解注释掉其中的某

    2024年02月09日
    浏览(9)
  • java生成、识别条形码和二维码

    使用 zxing 开源库 Zxing主要是Google出品的,用于识别一维码和二维码的第三方库 主要类: BitMatrix 位图矩阵 MultiFormatWriter 位图编写器 MatrixToImageWriter 写入图片 可以生成、识别条形码和二维码 内置三种尺寸: enum Size {SMALL, MIDDLE, BIG} 依赖 将宽度不等的多个黑条和白条,按照一定

    2024年02月08日
    浏览(16)
  • Java生成二维码(前后端分离项目实战)

    📍 本文代码已放置 github:Mr-Write/SpringbootDemo: 各种demo案例 (github.com) ZXing(Zebra Crossing)是一个开源的条码扫描和生成库,用于读取和生成各种类型的条码和二维码。它由 Google 开发并发布,目前由一群开源社区维护。 ZXing 支持多种常见的条码格式,包括一维条码(如EAN-13、

    2024年02月10日
    浏览(13)
  • 微信小程序生成二维码并保存到本地方法

    办法一 官方weapp-qrcode插件 github链接 功能完成样子 wxml js文件 如果github进不去可以直接复制我这个js到项目里 weapp-qrcode.js 办法二 如图所示 先下载依赖 然后点击小程序顶部菜单栏工具-构建npm 使用方法 wxml js 参数详解 条形码 函数名:barcode 函数原型:barcode(id, code, width, heig

    2024年02月04日
    浏览(19)
  • 纯前端实现二维码生成(原生/vue方法)(超简单)

    我们借用了qrcode.js插件,这个插件可以帮助我们生成二维码,超简单超好用 下面是我生成了一个主页的二维码,大家可以扫码查看效果 1.本地文件引入 本地引入依赖包地址:下载地址  1.首先引入插件,这里我是script标签引入的,如果用vue直接全局引入即可 2.npm方式引入 2

    2024年04月22日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包