`
kfcman
  • 浏览: 399524 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java实现二维码生成与解析

 
阅读更多

版本3.3.3

 

链接:https://pan.baidu.com/s/1NpJXjCVHaHYaMaXyQEJzAA
提取码:bu9c

 

 

import com.alibaba.fastjson.JSONObject;
import com.google.zxing.*;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;

/**
* 二维码生成工具类
*
* @author yclimb
* @date 2018/4/23
*/
public class QRCodeUtil {

    private static Logger log = LoggerFactory.getLogger(QRCodeUtil.class);

    /**
     * 生成二维码
     * @param text 内容,可以是链接或者文本
     * @param path 生成的二维码位置
     */
    public static void encodeQRCode(String text, String path) {
        encodeQRCode(text, path, null, null, null);
    }

    /**
     * 生成二维码
     * @param text 内容,可以是链接或者文本
     * @param path 生成的二维码位置
     * @param width 宽度,默认300
     * @param height 高度,默认300
     * @param format 生成的二维码格式,默认png
     */
    public static void encodeQRCode(String text, String path, Integer width, Integer height, String format) {
        try {

            // 得到文件对象
            File file = new File(path);
            // 判断目标文件所在的目录是否存在
            if(!file.getParentFile().exists()) {
                // 如果目标文件所在的目录不存在,则创建父目录
                log.info("目标文件所在目录不存在,准备创建它!");
                if(!file.getParentFile().mkdirs()) {
                    log.info("创建目标文件所在目录失败!");
                    return;
                }
            }

            // 宽
            if (width == null) {
                width = 300;
            }
            // 高
            if (height == null) {
                height = 300;
            }
            // 图片格式
            if (format == null) {
                format = "png";
            }

            // 设置字符集编码
            Map<EncodeHintType, Object> hints = new HashMap<>();
            hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
            // 生成二维码矩阵
            BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height, hints);
            // 二维码路径
            Path outputPath = Paths.get(path);
            // 写入文件
            MatrixToImageWriter.writeToPath(bitMatrix, format, outputPath);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
    }

    /**
     * 对二维码图片进行解码
     * @param filePath 二维码路径
     * @return 解码后对内容
     */
    public static JSONObject decodeQRCode(String filePath) {

        try {

            // 读取图片
            BufferedImage image = ImageIO.read(new File(filePath));

            // 多步解析
            LuminanceSource source = new BufferedImageLuminanceSource(image);
            Binarizer binarizer = new HybridBinarizer(source);
            BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);

            // 一步到位
            // BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)))

            // 设置字符集编码
            Map<DecodeHintType, String> hints = new HashMap<>();
            hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");

            // 对图像进行解码
            Result result = new MultiFormatReader().decode(binaryBitmap, hints);
            // 解码内容
            JSONObject content = JSONObject.parseObject(result.getText());

            System.out.println("图片内容:  ");
            System.out.println("content: " + content.toJSONString());
            System.out.println("图片中格式:  ");
            System.out.println("encode: " + result.getBarcodeFormat());

            return content;
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }

        return null;
    }
}

 

 

测试

public staticvoid main(String[] args) {

  
// 生成路径
  
String filePath = "/Users/yclimb/Documents/tmp/first.png";

  
// 生成二维码
   encodeQRCode(
"第一个二维码", filePath);

  
// 解码二维码
   decodeQRCode(filePath);
}

分享到:
评论

相关推荐

    基于java的二维码生成与解析demo

    这是一个基于java开发的二维码生成与解析 可以根据程序配置的参数设置生成二维码的图片大小 以及密度 这是一个基于java开发的二维码生成与解析 可以根据程序配置的参数设置生成二维码的图片大小 以及密度 这是一个...

    Java 实现 二维码生成与解析 实例 附完整源码.rar

    总之,Java语言结合ZXing库,提供了强大的二维码生成与解析能力。通过理解这些基础知识,开发者可以轻松地在自己的项目中集成二维码功能,无论是简单的数据传输还是复杂的业务场景,都能游刃有余。学习并掌握这部分...

    Java实现的生成二维码和解析二维码URL操作示例

    Java 实现生成二维码和解析二维码 URL 操作示例 Java 是一种广泛使用的编程语言,具有强大的功能和灵活性。在实际应用中,生成二维码和解析二维码 URL 是非常常见的操作。本文将详细介绍 Java 实现生成二维码和解析...

    Java QRCode二维码生成与识别 开源

    总的来说,这个Java QRCode二维码生成与识别开源项目提供了一整套解决方案,从生成包含汉字的二维码到读取和解析二维码图像。开发者可以利用这些工具进行各种应用开发,如移动支付、信息分享、门票验证等。通过深入...

    Java二维码生成/解析工具

    QRCodeUtils使用文档详见博客https://blog.csdn.net/qq_24091555/article/details/81263472

    java web 二维码生成与解析实例

    总结来说,这个Java Web二维码生成与解析实例涵盖了Java编程、Web开发、二维码编码解码以及HTTP服务处理等多个技术领域。通过实践这个实例,开发者不仅可以掌握基础的二维码操作,还能深入理解Java Web应用的开发...

    Java实现二维码生成和解析代码

    本文将详细讲解如何使用Java语言来实现二维码的生成与解析,这是一项非常实用的技术,尤其在移动互联网领域。 首先,我们要了解二维码的基本原理。二维码是一种二维条形码,它通过矩阵形式存储数据,可以包含文字、...

    java的二维码生成与解析

    Java二维码生成与解析是计算机编程领域中的一个常见技术,尤其在移动互联网和物联网应用中扮演着重要角色。本文将深入探讨Java如何实现二维码的生成与解析,并分享一个源自日文网站的相关程序,供读者学习和实践。 ...

    关于Java的二维码的生成与解析

    `TestRead.java` 可能包含了使用特定库读取二维码的代码,而 `TestZXing.java` 可能是基于开源项目ZXing(Zebra Crossing)进行二维码生成的代码实现。 ZXing,或称“条形码扫描器”,是一个全面的、开源的、跨平台...

    java二维码生成与解析代码实现.docx

    以下是一些关于Java二维码生成与解析的关键知识点: 1. **依赖库**: - `QRCode.jar`:这是用于生成和解码二维码的库,它可能包含了`jp.sourceforge.qrcode`和`com.swetake.util.Qrcode`这两个包,这两个包提供了...

    Java 二维码生成、解析

    本文将详细介绍如何使用Google的ZXing库来实现Java环境下的二维码生成与解析。 ZXing,全称Zebra Crossing,是一个开源的多格式一维/二维条码图像处理库,支持多种条码和二维码格式,如QRCode、DataMatrix、UPC等。...

    二维码生成与解析代码实现

    二维码生成与解析是现代信息化社会中常见的技术,广泛应用于各种场景,如名片交换、网址跳转、支付等。本文将详细讲解如何通过源码实现这一功能,并探讨其中的关键知识点。 首先,我们来看`TwoDimensionCode.java`...

    Java二维码生成和解析实现

    以上就是使用Java和ZXing库实现二维码生成与解析的基本步骤。在实际应用中,可能需要根据具体需求进行错误处理、格式调整、定制样式等。源码文件中的内容可能包括了这些更具体的实现细节,可以深入研究以获取更全面...

    Java代码实现二维码生成与解析.pdf

    本示例代码展示了如何使用Java实现这一功能,主要依赖于一个名为`com.swetake.util.Qrcode`的库,这个库提供了二维码生成的核心算法。 首先,我们需要了解二维码的基本概念。二维码(Quick Response Code)是一种二...

    java二维码生成与解析代码实现代码

    Java二维码生成通常依赖于第三方库,如ZXing(Zebra Crossing)或Java QRCode Library。ZXing是一个开源项目,提供了多种条形码和二维码的读写能力。在Java中使用ZXing,我们需要添加对应的依赖,如果你使用的是...

    java实现二维码.zip

    以下是一些关于使用Java实现二维码生成与解析的关键知识点: 1. **ZXing库介绍**: - ZXing是一个多格式的一维/二维条码图像处理库,支持多种条码格式,包括QR码、Code 128、EAN等。 - Java开发者可以利用ZXing库...

    java实现生成二维码和解析二维码

    总之,Java实现二维码生成和解析的关键在于选择合适的库(如ZXing),理解二维码编码规则,并利用提供的API进行编码和解码操作。实际应用中,还需要考虑性能优化、错误处理以及用户交互设计等方面,确保功能的稳定性...

    java二维码生成与解析实例

    Java语言提供了多种库来支持二维码的生成与解析,其中Zxing(Zebra Crossing)是一个开源项目,专为多种一维条码和二维条码提供读取、生成功能。本文将深入探讨如何在Java中利用Zxing库进行二维码的生成与解析。 ...

    JAVA 生成二维码并设置失效机制

    1.通过QRCode.jar包生成二维码,可设置二维码图片格式,二维码图片存放路径,二维码尺寸,二维码颜色 2.二维码扫描内容分为两种,1种为链接式,如:www.zdkc.com,通过链接展示访问的内容,1种为json数据展示,通过...

    二维码生成和解析

    二维码生成和解析是现代信息化技术中的重要组成部分,尤其在移动互联网和物联网领域中广泛应用。Java作为一门跨平台的编程语言,提供了丰富的库和工具来支持二维码的生成与解析。本篇将详细介绍如何在Java环境中实现...

Global site tag (gtag.js) - Google Analytics