java实现二维码的生成和解析包含工具类

本文介绍了一个使用Java实现的二维码生成和解析工具类。通过下载特定的jar包并利用提供的源代码,可以创建二维码图片并从图片中提取信息。文章详细展示了如何设置二维码参数,如大小、纠错级别和编码模式,并提供了生成和解析二维码的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、下载jar包( jdk1.7)

链接:https://pan.baidu.com/s/1LVq_zGsp_Po8V456h1TVmA
提取码:vqyd
在这里插入图片描述
在这里插入图片描述

2、工具类Utils.java
package test;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import jp.sourceforge.qrcode.QRCodeDecoder;
import jp.sourceforge.qrcode.data.QRCodeImage;
import com.swetake.util.Qrcode;
/**
 * 工具类
 * @author Xuan
 *
 */
public class Utils {
	//解析图片
	private static BufferedImage image = null;
	//
	/**
	 * 生成二维码
	 * @param srcValue 值
	 * @param qrcodePicfilePath 二维码图片生成的路径
	 */
	public static boolean QrCode_encode(String srcValue, String qrcodePicfilePath){
		//计算二维码图片的高宽比
        // API文档规定计算图片宽高的方式 ,v是本次测试的版本号
        int v =6;
        int width = 67 + 12 * (v - 1);
        int height = 67 + 12 * (v - 1);

        Qrcode x = new Qrcode();
        /**
         * 纠错等级分为
         * level L : 最大 7% 的错误能够被纠正;
         * level M : 最大 15% 的错误能够被纠正;
         * level Q : 最大 25% 的错误能够被纠正;
         * level H : 最大 30% 的错误能够被纠正;
         */
        x.setQrcodeErrorCorrect('L');
        x.setQrcodeEncodeMode('B');//注意版本信息 N代表数字 、A代表 a-z,A-Z、B代表 其他)
        x.setQrcodeVersion(v);
        String qrData = srcValue;
        try {
        	//汉字转格式需要抛出异常
        	 byte[] d = qrData.getBytes("utf-8");

             //缓冲区
             image = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);

             //绘图
             Graphics2D gs = image.createGraphics();

             gs.setBackground(Color.WHITE);
             gs.setColor(Color.BLACK);
             gs.clearRect(0, 0, width, height);

             //偏移量
             int pixoff = 2;

             if (d.length > 0 && d.length < 120) {
                 boolean[][] s = x.calQrcode(d);

                 for (int i = 0; i < s.length; i++) {
                     for (int j = 0; j < s.length; j++) {
                         if (s[j][i]) {
                             gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
                         }
                     }
                 }
             }
             
             gs.dispose();
             image.flush();
             //输出图片
             ImageIO.write(image, "png", new File(qrcodePicfilePath));
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		}
       
        System.out.println("二维码生成完毕");
        return true;
	}

	/**
	 * 解析二维码
	 * @param qrcodePicfilePath 二维码图片地址
	 * @return
	 */
	public static String QrCode_decode(String qrcodePicfilePath) {
		System.out.println("开始解析二维码!!");
		File imageFile = new File(qrcodePicfilePath);
		try {

		image = ImageIO.read(imageFile);
		} catch (IOException e) {

		System.out.println("读取二维码图片失败: " + e.getMessage());

		return null;

		}
		QRCodeDecoder decoder = new QRCodeDecoder();
		String decodedData = new String(decoder.decode(new QRCodeImage() {
			
			@Override
			public int getWidth() {
				return image.getWidth();
			}
			
			@Override
			public int getPixel(int arg0, int arg1) {
				return image.getRGB(arg0, arg1);
			}
			
			@Override
			public int getHeight() {
				return image.getHeight();
			}
		}));
		
		System.out.println("解析内容如下:"+decodedData);
		return decodedData;
	}
}
3、测试类
package test;

/**
 * 二维码测试类
 * @author Xuan
 *
 */
public class Generate {

	public static void main(String[] args) {
		String data = "优快云的小白轩";
		//生成二维码
		Utils.QrCode_encode(data, "C:\\Users\\Administrator\\Desktop\\xiaoxuan.png");
		//解析二维码
		Utils.QrCode_decode("C:\\Users\\Administrator\\Desktop\\xiaoxuan.png");
	}

}
4、生成效果

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值