首页 > 编程语言 >java:一键生成二维码工具类

java:一键生成二维码工具类

时间:2024-08-04 20:05:33浏览次数:7  
标签:google java 一键 zxing 二维码 import com

前言:本工具选择了Zxing,他是一个开源的,使用java实现多种格式的1D/2D条码图像处理库,

1.pom添加依赖

  <!-- 二维码生成&识别组件 -->
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>3.3.3</version>
        </dependency>

        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>javase</artifactId>
            <version>3.3.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>

2.二维码生成工具类

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import org.apache.commons.lang3.StringUtils;

import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashMap;


public class QRCodeUtil {
    /**
     * 生成二维码
     *
     * @param content 二维码对应的URL
     * @param width   二维码图片宽度
     * @param height  二维码图片高度
     * @return
     */
    public String createQRCode(String content, int width, int height) throws IOException {
        String resultImage = "";
        //除了尺寸,传入内容不能为空
        if (!StringUtils.isEmpty(content)) {
            ServletOutputStream stream = null;
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            //二维码参数
            @SuppressWarnings("rawtypes")
            HashMap<EncodeHintType, Comparable> hints = new HashMap<>();
            //指定字符编码为“utf-8”
            hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
            //L M Q H四个纠错等级从低到高,指定二维码的纠错等级为M
            //纠错级别越高,可以修正的错误就越多,需要的纠错码的数量也变多,相应的二维吗可储存的数据就会减少
            hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
            //设置图片的边距
            hints.put(EncodeHintType.MARGIN, 1);

            try {
                //zxing生成二维码核心类
                QRCodeWriter writer = new QRCodeWriter();
                //把输入文本按照指定规则转成二维吗
                BitMatrix bitMatrix = writer.encode(content, BarcodeFormat.QR_CODE, width, height, hints);
                //生成二维码图片流
                BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix);
                //输出流
                ImageIO.write(bufferedImage, "png", os);
                /**
                 * 原生转码前面没有 data:image/png;base64 这些字段,返回给前端是无法被解析,所以加上前缀
                 */
                resultImage = new String("data:image/png;base64," + EncryptUtil.encodeBase64(os.toByteArray()));
                return resultImage;
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException("生成二维码出错");
            } finally {
                if (stream != null) {
                    stream.flush();
                    stream.close();
                }
            }
        }
        return null;
    }
}

3.附加解码工具类内方法

    public static String encodeBase64(byte[] bytes){
        String encoded = Base64.getEncoder().encodeToString(bytes);
        return encoded;
    }

4.调用工具类

QRCodeUtil qrCodeUtil = new QRCodeUtil();
System.out.println(qrCodeUtil.createQRCode("http://address:port/url", 200, 200));

5.结果分析:

最后一行黑字复制下来直接贴在浏览器,扫码后即可跳转到上述具体路径

6.小tips:前端直接用img标签接收即可展示效果

 

标签:google,java,一键,zxing,二维码,import,com
From: https://www.cnblogs.com/kun1790051360/p/18342140

相关文章

  • Java01 Java预备知识
    第一节:Java预备知识进制转化(1):二进制转十进制采用数字与阶码相乘并相加,阶码从右往左依次增大,从左往右依次减小。例:100(2)=0*2^0+0*2^1+1*2^4=4(10)(2):十进制转二进制采用辗转相除:即将十进制的数连续除以2直到商为0,将余数从下到上逆序排列,即为此数对应的二进制数(小数部分则为......
  • Java代码审计-SQL注入
    Java代码审计-SQL注入前言一、SQL注入简介二、Java主要执行SQL语句的方式三、JDBC方式产生的漏洞1.Statement方式2.PreparedStatement方式四、MyBatis方式产生的漏洞1.两种参数符号造成的SQL注入2.orderby、like、in引发注入五、Hibernate方式产生的漏洞1.简介2.原理......
  • Java代码审计-命令执行
    Java代码审计-命令执行前言一、漏洞简介二、命令连接符三、ProcessBuilder命令执行1.ProcessBuilder简介2.漏洞利用四、Runtimeexec命令执行1.Runtimeexec简介2.漏洞利用五、探索1.代码底层原理2.疑问3.小结六、总结参考前言今天来学一下java代码审计中的命令......
  • 2--Web前端开发-JavaScript
    引入方式1、内部脚本:将JS代码定义在HTML页面中JavaScript代码必须位于<script></script>标签之间在HTML文档中,可以在任意地方,放置任意数量的<script>一般会把脚本置于<body>元素的底部,可以改善显示速度<script>alert("hellojavascript");</script>可放在代码中任意位......
  • Java流程控制语句结构--分支结构
    目录if语句switch语句三元运算符(条件运算符)总结Java中的分支结构是程序设计中用于根据条件选择不同执行路径的重要机制。它允许程序在运行时根据特定条件来决定执行哪一部分代码。Java中的分支结构主要包括以下几种:if语句基本形式:if(条件表达式){语句块;}如果条件表达式......
  • Java流程控制语句结构--循环结构
    目录while循环do…while循环for循环三种循环的死循环形式while循环while是最基本的循环,它的结构为:while(布尔表达式(判断条件)){//循环内容}只要布尔表达式为true,循环就会一直执行下去。do…while循环对于while语句而言,如果不满足条件,则不能进入循环。但有时候我......
  • Java流程控制04:循环结构
    顺序结构的程序语句只能被执行一次。如果您想要同样的操作执行多次,就需要使用循环结构。Java中有三种主要的循环结构:while循环do…while循环for循环1.while循环while是最基本的循环,它的结构为:while(布尔表达式){//循环内容}只要布尔表达式为true,循环就会一......
  • Java流程控制05:break & continue
    1.break关键字break主要用在循环语句或者switch语句中,用来跳出整个语句块。break跳出最里层的循环,并且继续执行该循环下面的语句。【演示:跳出循环】publicstaticvoidmain(String[]args){ inti=0; while(i<100){ i++; System.out.println(i); if(i==......
  • ros 一键 之 rosdep
    #-*-coding:utf-8-*-from.baseimportBaseToolfrom.baseimportPrintUtils,CmdTask,FileUtils,AptUtils,ChooseTaskfrom.baseimportosversionfrom.baseimportrun_tool_fileclassTool(BaseTool):def__init__(self):self.type=BaseTool.T......
  • JavaScript之ECMAScript(二)
    三、ECMAScript基础(一)函数1.函数的定义函数指能实现特定功能的代码块,通常使用function(){}进行函数的定义2.函数的三种定义形式2.1使用function关键字定义使用function函数名(){函数体}进行定义,使用“函数名()”进行调用。2.1使用var关键字定义使用va......