首页 > 编程语言 >Java生成二维码的方法,QRCode、JQuery、Zxing

Java生成二维码的方法,QRCode、JQuery、Zxing

时间:2024-07-17 20:57:11浏览次数:17  
标签:JQuery Java String filepath param 二维码 result QRCode new

QR code

国标

简单示例

相关资源下载

zxing 实现

生成

	/**
     * 生成二维码
     *
     * @param width
     * @param height
     * @param name
     * @param format
     * @param content
     */
    public static String generateQRCodeByZxing(int width, int height, String name, String format, String content) {
        /**
         * 定义二维码参数
         */
        Map<EncodeHintType, Object> hints = new HashMap<>();
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
        hints.put(EncodeHintType.MARGIN, 2);

        //生成二维码
        try {
            BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height);
            String filename = name + "." + format;
            Path filepath = Paths.get("QRCode", "src", "com", "heyqing", "generate", filename);
            MatrixToImageWriter.writeToPath(bitMatrix, format, filepath);
            MatrixToImageWriter.writeToPath(bitMatrix, format, filepath);
            System.out.println("二维码生成完成!!! \n请前往【" + filepath.toString() + "】查看");
            return filepath.toString();
        } catch (WriterException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

解析

 	/**
     * 解析二维码
     *
     * @param filepath
     * @return
     */
    public static Result parserQRCodeByZxing(String filepath) {
        MultiFormatReader formatReader = new MultiFormatReader();
        File file = new File(filepath);
        try {
            BufferedImage image = ImageIO.read(file);
            BinaryBitmap binaryBitmap = new BinaryBitmap(
                    new HybridBinarizer(new BufferedImageLuminanceSource(image)));
            /**
             * 定义二维码参数
             */
            Map<DecodeHintType, Object> hints = new HashMap<>();
            hints.put(DecodeHintType.CHARACTER_SET, "utf-8");

            Result result = formatReader.decode(binaryBitmap, hints);
            System.out.println("解析结果:" + result.toString());
            System.out.println("二维码格式:" + result.getBarcodeFormat());
            System.out.println("二维码文本内容:" + result.getText());
            image.flush();
            return result;
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (NotFoundException e) {
            throw new RuntimeException(e);
        }
    }

测试

	/**
     * zxing
     */
    private static void zxingTest() {
        String filepath = QRCodeByZxing.generateQRCodeByZxing(300, 300,
                "github", "png", "https://github.com/heyqing");
        Result result = QRCodeByZxing.parserQRCodeByZxing(filepath);
        System.out.println(result.toString());
    }

GitHub

QR code 实现

生成

	/**
     * 生成二维码
     *
     * @param name
     * @param format
     * @param content
     * @return
     */
    public static String generateQRCodeByQRCode(String name, String format, String content) {
        Qrcode qrcode = new Qrcode();
        /**
         * 纠错等级,建议 M
         */
        qrcode.setQrcodeErrorCorrect('M');
        /**
         * 字符类型,A:代表字母,N:代表数字,B:代表其他字符
         */
        qrcode.setQrcodeEncodeMode('B');
        /**
         * 版本,建议 7
         */
        int version = 7;
        qrcode.setQrcodeVersion(version);

        int width = 67 + 12 * (version - 1);
        int height = 67 + 12 * (version - 1);
        /**
         * 设置绘图基础面板
         */
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics2D graphics = image.createGraphics();
        graphics.setBackground(Color.WHITE);
        graphics.setColor(Color.BLACK);
        graphics.clearRect(0, 0, width, height);
        /**
         * 偏移量
         */
        int pixoff = 2;
        byte[] contentBytes = content.getBytes();
        /**
         * 字节填充绘图
         */
        if (contentBytes.length > 0 && contentBytes.length < 120) {
            boolean[][] s = qrcode.calQrcode(contentBytes);
            for (int i = 0; i < s.length; i++) {
                for (int j = 0; j < s.length; j++) {
                    if (s[j][i]) {
                        graphics.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
                    }
                }
            }
        }
        graphics.dispose();
        image.flush();
        String filename = name + "." + format;
        String path = Paths.get("QRCode", "src", "com", "heyqing", "generate", filename).toString();
        File filepath = new File(path);
        try {
            ImageIO.write(image, format, filepath);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        System.out.println("二维码生成完成!!! \n请前往【" + filepath.toString() + "】查看");
        return filepath.toString();
    }

解析

	/**
     * 解析二维码
     *
     * @param filepath
     * @return
     */
    public static String parserQRCodeByQRCode(String filepath) {
        File file = new File(filepath);
        try {
            BufferedImage bufferedImage = ImageIO.read(file);
            QRCodeDecoder qrCodeDecoder = new QRCodeDecoder();
            String result = new String(qrCodeDecoder.decode(new MyQRCodeImage(bufferedImage)), "gb2312");
            System.out.println("解析结果:" + result);
            bufferedImage.flush();
            return result;
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

测试

/**
     * qrcode
     */
    private static void qrcodeTest() {
        String filepath = QRCodeByQRCode.generateQRCodeByQRCode("gitee", "png", "https://gitee.com/heyqing");
        String res = QRCodeByQRCode.parserQRCodeByQRCode(filepath);
        System.out.println(res);
    }

Gitee

jQuery 实现

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>jQuery-generate-qrcode</title>
    <script type="text/javascript" src="<%=request.getContextPath() %> /js/jquery.min.js"></script>
    <script type="text/javascript" src="<%=request.getContextPath() %> /js/jquery.qrcode.min.js"></script>
</head>
<body>
<h1>生成的二维码如下:</h1><br>
<div id="qrcode"></div>
<script type="text/javascript">
    jQuery('#qrcode').qrcode("https://blog.csdn.net/heyiqingsong")
</script>
</body>
</html>

csdn

更多

二维的生成还有众多的样式可选择,敬请期待更多!!!

标签:JQuery,Java,String,filepath,param,二维码,result,QRCode,new
From: https://blog.csdn.net/heyiqingsong/article/details/140504619

相关文章

  • Java面试 : String
    串池:StringTable,可以理解为一个对象数组["a","b","ab"]每一个元素都是一个字符串对象1.常量池与串池的关系Strings1="a";Strings2="b";Strings3="ab";上述代码的运行过程:常量池中的信息会被加载到运行时常量池中,这时abab都是常量池中的符号,还没有变成Java......
  • Java核心API——Object类
    Object简介         Object类是所有类的根类,这意味着在Java中创建的每一个类都直接或间接地继承自Object类(除了Object类本身以外,因为它没有父类)    看到这里你或许还是不明为什么要有Object类下面我就详细解释。首先这里就不得不提到Java这门语言让人熟......
  • Java——IO流
    1.IO流简介流是一个抽象的概念,它是一串连续动态的数据集合Java.io包中几乎包含了所有操作输入和输出需要的类,同时也支持很多格式,比如:基本类型,对象,本地化字符等io包中主要包括四大抽象类,分别是Writer,OutputStream,InputStream,Reader,其中Writer和OutputStream属于......
  • 常用的 JavaScript 数组处理方法
    1.map方法用于创建一个新数组,其结果是该数组中的每个元素调用一个提供的函数后返回的结果。letitems=[{id:1,name:'item1'},{id:2,name:'item2'},{id:3,name:'item3'}];letitemNames=items.map(item=>item.name);console.log(itemNames);......
  • Java语言基础-03
    1.Scanner接收用户输入的数据:packageday04;importjava.util.Scanner;//1.导入一个扫描仪//Scanner的演示publicclassScannerDemo{publicstaticvoidmain(String[]args){//创建类CommandBySwitch,接收用户输入的命令command(int),并输出......
  • 【java计算机毕设】网上购书管理系统MySQL servlet JSP项目设计源代码 期末寒暑假作业
    目录1项目功能2项目介绍3项目地址1项目功能【java计算机毕设】网上购书管理系统MySQLservletJSP项目设计源代码期末寒暑假作业小组作业 2项目介绍系统功能:servlet网上购书管理系统包括管理员、用户两种角色。管理员功能包括订单管理(已处理,未处理),顾客管理(添......
  • Javascript: Blob, File/FileReader, ArrayBuffer, ReadableStream, Response 转换方
    目录先上图各个ObjectArrayBuffer:Blob:File:FileReader:ReadableStream:Response用法举例ArrayBufferBlob,File,FileReaderReadableStream关于ReadableStream的一点总结Response构造函数Parametersblob()先上图各个ObjectArrayBuffer:1.ArrayBuffer是JavaScript......
  • JAVA操作Excel使用poi和easyexcel依赖的兼容性问题
      EasyExcel版本3.1.0及以上支持poi5.2.3。具体来说,EasyExcel3.1.0及之后的版本兼容poi4.1.2至5.2.2的范围,因此它确实支持poi5.2.3。但请注意,使用3.0.0及以上版本的EasyExcel配合poi5+时,需要手动在项目的依赖管理中排除poi-ooxml-schemas依赖,示例如下:<dependency>......
  • 基础知识(JAVA入门)
    常用的CMD命令盘符名称+冒号说明:盘符切换dir说明:查看当前路径下的内容cd说明:进入单级目录cd..说明:回退到上一级目录cd目录1\目录2....说明:进入多级目录cls说明:清屏exit说明:退出命令提示符窗口环境变量我们想要在任意的目录下都可以打开指定的软件。就可以把软件的路......
  • 基于java+springboot+vue实现的实验室管理系统(文末源码+Lw)127
    基于SpringBoot+Vue的实现的实验室管理系统(源码+数据库+万字Lun文+流程图+ER图+结构图+演示视频+软件包)系统功能:实验室管理系统管理员功能有个人中心,学生管理,教师管理,公告信息管理,知识库管理,实验课程管理,实验室信息管理,实验室预约管理,实验设备管理,采购记录管理,维修记录管理......