二维码生成和解析工具包-zxing

news2024/12/24 9:08:33

 目录

1、简介

2、做个例子

2.1 添加依赖

2.2 工具类

2.3 测试

3、总结


今天在看一个开源项目的时候发现一个工具类,一个简单的生成二维码的工具类,测试了下很是方便。

虽然在平常的开发中没有使用过,为了以后的场景做个备份

1、简介

GitHub 开源地址: github.com/zxing/zxing

zxing 二进制包下载地址:repo1.maven.org/maven2/com/…

zxing Maven 仓库地址:mvnrepository.com/artifact/co…

ZXing支持各种条形码,二维码扫描,由多个模块组成, 而且支持PC端,移动端。

2、做个例子

2.1 添加依赖

如果要生成二维码图片,那么我们只需要它的核心库即可

如果你想通过命令行读取二维码图片,那么我们需要使用它的JavaSE库。您可以为其添加以下依赖项。

<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>

2.2 工具类

package com.pdool.demo;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;


/**
 * 二维码生成工具
 * </pre>
 */
public class MatrixToImageWriter {


    private static final int BLACK = 0xFF000000;
    private static final int WHITE = 0xFFFFFFFF;

    private MatrixToImageWriter() {
    }

    /**
     * 根据二维矩阵的碎片 生成对应的二维码图像缓冲
     *
     * @param matrix 二维矩阵的碎片 包含 宽高 行,字节
     * @return 二维码图像缓冲
     * @see BitMatrix
     */
    public static BufferedImage toBufferedImage(BitMatrix matrix) {
        int width = matrix.getWidth();
        int height = matrix.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, matrix.get(x, y) ? BLACK : WHITE);
            }
        }
        return image;
    }


    /**
     * 二维码生成文件
     *
     * @param matrix 二维矩阵的碎片 包含 宽高 行,字节
     * @param format 格式
     * @param file   保持的文件地址
     * @throws IOException 文件保存异常
     */
    public static void writeToFile(BitMatrix matrix, String format, File file)
            throws IOException {
        BufferedImage image = toBufferedImage(matrix);
        if (!ImageIO.write(image, format, file)) {
            throw new IOException("Could not write an image of format " + format + " to " + file);
        }
    }


    /**
     * 二维码生成流
     *
     * @param matrix 二维矩阵的碎片 包含 宽高 行,字节
     * @param format 格式
     * @param stream 保持的文件输出流
     * @throws IOException 文件保存异常
     */
    public static void writeToStream(BitMatrix matrix, String format, OutputStream stream)
            throws IOException {
        BufferedImage image = toBufferedImage(matrix);
        if (!ImageIO.write(image, format, stream)) {
            throw new IOException("Could not write an image of format " + format);
        }
    }


    /**
     * 二维码信息写成JPG文件
     *
     * @param content 二维码信息
     * @param fileUrl 文件地址
     */
    public static void writeInfoToJpgFile(String content, String fileUrl) {
        MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
        Map hints = new HashMap();
        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
        try {
            BitMatrix bitMatrix = multiFormatWriter.encode(content,
                    BarcodeFormat.QR_CODE, 250, 250, hints);
            File file1 = new File(fileUrl);
            MatrixToImageWriter.writeToFile(bitMatrix, "jpg", file1);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * 二维码信息写成JPG BufferedImage
     *
     * @param content 二维码信息
     * @return JPG BufferedImage
     */
    public static BufferedImage writeInfoToJpgBuff(String content) {
        BufferedImage re = null;

        MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
        Map hints = new HashMap();
        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
        try {
            BitMatrix bitMatrix = multiFormatWriter.encode(content,
                    BarcodeFormat.QR_CODE, 250, 250, hints);
            re = MatrixToImageWriter.toBufferedImage(bitMatrix);
        }
        catch (Exception e) {
            e.printStackTrace();
        }

        return re;
    }

    public static void main(String[] args) throws IOException {

    }

}

2.3 测试

这里直接上测试代码

public static void main(String[] args) throws IOException {  
    writeInfoToJpgFile("关注我公众号:程序这点事","E:\\work\\test.jpg");  
}

文章中不让贴二维码,测试一下你就知道,这里直接使用支付宝的识别

15abb351b53ae5532c1ebb3b43107e8.jpg

3、总结

只是无意中看到的一个工具类,很好用,记录下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1136296.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CTF密码学概述

一. 引言 密码在我们的生活中应用于方方面面&#xff0c;我们的微信、QQ、支付宝、以及我们去银行取钱&#xff0c;都需要输入正确的密码&#xff0c;所以密码学在计算机信息安全上面都是非常重要的。我们现在每天打开的网络页面&#xff0c;浏览的视频内容都是表层网络&#…

用友GRP-U8注入

分享一个拿到CNDV证书的SQL注入&#xff0c;证书截图如下 0x01 漏洞介绍 fofa&#xff1a;app”用友-GRP-U8” 用友GRP-U8存在SQL注入&#xff0c;漏洞文件名为bx_historyDataCheck.jsp 0x02 漏洞分析 文件截图如下 该文件接收3个传参&#xff0c;分别是userName&#xff…

班主任,怎么发布期中考试成绩?

各位班主任是不是有时候觉得每次手动发布期中考试成绩是一件既繁琐又痛苦的事情&#xff1f;让我给你们介绍一个神器——成绩查询系统&#xff01;让你们的工作变得轻松&#xff0c;让学生们能够自主查询成绩。 我们先了解一下什么是成绩查询系统。成绩查询系统是一种专门用于发…

性能测试 —— Jmeter 常用三种定时器!

1、同步定时器 位置&#xff1a;HTTP请求->定时器->Synchronizing Timer 当需要进行大量用户的并发测试时&#xff0c;为了让用户能真正的同时执行&#xff0c;添加同步定时器&#xff0c;用户阻塞线程&#xff0c;知道线程数达到预先配置的数值&#xff0c;才开始执行…

【Golang】简记操作:Centos安装、卸载、升级Golang运行环境

目录 安装 1、根据实际需求选择合适的golang版本 如下图&#xff0c;选择合适的版本&#xff0c;右键复制链接 2、在Centos选择合适的目录下载golang的源文件 3、解压golang的源文件&#xff0c;解压完成即可执行go命令 4、设置golang的全局环境变量&#xff08;/etc/pr…

人机环境系统智能是东方与西方智能思想的融合

人机环境系统的思想是一种综合性的思想&#xff0c;它融合了东方思想和西方思想的元素。在东方文化中&#xff0c;人类与自然环境有着密切的联系&#xff0c;强调人类与自然环境的和谐共生关系。而在西方文化中&#xff0c;科技和机器的应用越来越广泛&#xff0c;对人类社会和…

蓝桥杯每日一题2023.10.26

测试次数 - 蓝桥云课 (lanqiao.cn) 题目描述 题目分析 对于本题我们可以使用动态规划来分析 dp[i][j]代表剩余i层&#xff0c;j台手机的情况下对应的测试数量 分类进行讨论一下&#xff1a; 1.当只剩下一台手机的时候&#xff0c;只能从第一层一层一层往上尝试&#xff0c…

日常开发问题汇总

2023.10.26 1.生产环境代码校验更严格产生的问题 发版时出现的问题: 点击报错或提交没有反应 排查: 点击保存后控制台network没有发起请求,定位问题在前端代码,查看代码发现,代码执行到这一行就没往下执行了 这个结果匪夷所思,细看代码后发现是下面代码的问题: 然后…

数据类型与变量—Javase

1.字面常量 在上节课HelloWorld程序中&#xff0c; System.Out.println("Hello World")&#xff1b; 语句&#xff0c;不论程序何时运行&#xff0c;输出的都是Hello World&#xff0c;其实"Hello World"就是字面常量。 常量即程序运行期间&#xff0c;固…

Generative AI 新世界 | Falcon 40B 开源大模型的部署方式分析

在上期文章&#xff0c;我们探讨了如何在自定义数据集上来微调&#xff08;fine-tuned&#xff09;模型。本期文章&#xff0c;我们将重新回到文本生成的大模型部署场景&#xff0c;探讨如何在 Amazon SageMaker 上部署具有 400 亿参数的 Falcon 40B 开源大模型。 亚马逊云科技…

Java中的基础知识

导言&#xff1a; 在Java中有很多与C语言类似的语法&#xff0c;但其中又有不同之处。本篇文章主要对java中的数据类型&#xff0c;变量以及类型转换进行简单的介绍&#xff0c;并指出与C的相同与不同之处。 目录 导言&#xff1a; 正文&#xff1a; 一.数据类型 二.变量…

win10蓝牙无法连接,可以尝试在此Windows设备上打开蓝牙

问题:想连接蓝牙耳机,显示无法连接,在设备上打开蓝牙 解决方法 按照以下步骤执行冷重启&#xff1a;长按电源按钮10s&#xff0c;直到屏幕关闭&#xff0c;然后松开。拔下电脑的电源线&#xff0c;等30s&#xff0c;再次打开设备

【尘缘赠书活动第二期】:信息科技风险管理

引言 信息科技对金融业务发展所起的作用是举足轻重的。近年来&#xff0c;金融机构在战略规划中相继引入科技引领的概念。作为金融机构信息科技从业人员&#xff0c;我们笃信信息科技是一个非常有用的工具&#xff0c;一个兼具产品思维和管理思维、拥有高质增效能力的工具。 …

基于机器视觉的图像拼接算法 计算机竞赛

前言 图像拼接在实际的应用场景很广&#xff0c;比如无人机航拍&#xff0c;遥感图像等等&#xff0c;图像拼接是进一步做图像理解基础步骤&#xff0c;拼接效果的好坏直接影响接下来的工作&#xff0c;所以一个好的图像拼接算法非常重要。 再举一个身边的例子吧&#xff0c;…

从顺序表中删除其值在给定值s与t之间(要求s<t)的所有元素,若s或t不合理或顺序表为空,则显示出错误信息并退出运行

从顺序表中删除其值在给定值s与t之间&#xff08;要求s<t&#xff09;的所有元素&#xff0c;若s或t不合理或顺序表为空&#xff0c;则显示出错误信息并退出运行。 顺序表定义及初始化 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #define MaxSize 10//定义…

浅谈中国汽车充电桩行业市场状况及充电桩选型的介绍

安科瑞虞佳豪 车桩比降低是完善新能源汽车行业配套的一大重要趋势&#xff0c;目前各国政府都在努力推进政策&#xff0c;通过税收减免、建设补贴等措施提升充电桩建设速度&#xff0c;以满足新能源汽车需求。 近年来&#xff0c;在需求和技术的驱动下&#xff0c;充电桩的平…

QT QProcess的使用

定义 The QProcess class is used to start external programs and to communicate with them. QProcess类是用来启动一个外部程序并与之通信。 本文福利&#xff0c;莬费领取Qt开发学习资料包、技术视频&#xff0c;内容包括&#xff08;Qt实战项目视频教程代码&#xff0c;…

MySQL初始化之后启动报错(mysqld: Table ‘mysql.plugin‘ doesn‘t exist)

报错场景 初始化之后&#xff0c;服务无法启动。错误日志error-log 报错如下&#xff1a;&#xff08;mysql库下的系统表不存在&#xff09; 2023-10-26T06:03:08.150163-00:00 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. 2023-10-26T06:03:08.496…

RabbitMQ生产者的可靠性

目录 MQ使用时会出现的问题 生产者的可靠性 1、生产者重连 2、生产者确认 3、数据持久化 交换机持久化 队列持久化 消息持久化 LazyQueue懒加载 MQ使用时会出现的问题 发送消息时丢失&#xff1a; 生产者发送消息时连接MQ失败生产者发送消息到达MQ后未找到Exchange生产…

linux音频-IIS音频接口

IIS 总线 IIS(Integrate Interface of Sound)即集成音频接口&#xff0c;在上个世纪 80 年代首先被 Philips 公司用于消费产品的音频设备&#xff0c; I2S规范 I2S总线只能用来处理audio data&#xff0c;而别的信号比如控制信号&#xff0c;编码信号则交给别的模块处理。为了…