用QR Code方式生成二维码,解析二维码

 用zxing生成二维码:https://blog.csdn.net/qq_41879385/article/details/81320723

使用QR Code方式生成二维码:

package com.qrcode;

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 com.swetake.util.Qrcode;

/**
 * 
 * @author 谢财盛 
 * 文件名:QRCode.java
 * 时间日期:2018年7月31日下午10:32:57
 * 作用:TODO
 * 版本号:1.0
 */
public class QRCode {
	public static void main(String[] args) throws IOException {
		
		Qrcode x = new Qrcode();
		x.setQrcodeErrorCorrect('M');  //纠错等级
		x.setQrcodeEncodeMode('B');	   //N代表数字,A代表a-Z,B代表其他字符
		x.setQrcodeVersion(7);		   //版本
		
		String qrDate = "SSM框架";
		int width= 67+12 * (7-1);
		int height= 67+12 * (7-1);
		BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
		
		Graphics2D gs = bufferedImage.createGraphics();
		gs.setBackground(Color.WHITE);
		gs.setColor(Color.BLACK);
		gs.clearRect(0, 0, width, height);
		
		int pixoff=2; //偏移量
		
		byte[] d = qrDate.getBytes("gb2312");
		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();
		bufferedImage.flush();
		ImageIO.write(bufferedImage, "png", new File("D:/code/img2.png"));
		
	}
}

运行结果:(可以试着扫一下)

 下面贴出用QR Code解析二维码:

1.首先是main:

package com.qrcode;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

import jp.sourceforge.qrcode.QRCodeDecoder;

/**
 * 
 * @author 谢财盛 
 * 文件名:ReadQRCode.java
 * 时间日期:2018年8月1日下午10:25:20
 * 作用:TODO
 * 版本号:1.0
 */
public class ReadQRCode {
	public static void main(String[] args) throws IOException {
		File file = new File("D:/code/img2.png");
		
		BufferedImage bufferedImage = ImageIO.read(file);
		
		QRCodeDecoder codeDecoder = new QRCodeDecoder();
		
		String result = new String(codeDecoder.decode(new QRCodeImage(bufferedImage)),"gb2312");
		
		System.out.println(result);
		
	}

}

2.接下来就需要一个类:

package com.qrcode;

import java.awt.image.BufferedImage;


/**
 * 
 * @author 谢财盛 
 * 文件名:QRCodeImage.java
 * 时间日期:2018年8月1日下午10:38:48
 * 作用:TODO
 * 版本号:1.0
 */
public class QRCodeImage implements jp.sourceforge.qrcode.data.QRCodeImage {
	
	BufferedImage bufferedImage;
	
	public QRCodeImage(BufferedImage bufferedImage){
		this.bufferedImage=bufferedImage;
	}
	
	public int getHeight() {
		return bufferedImage.getHeight();
	}

	@Override
	public int getPixel(int arg0, int arg1) {
		return bufferedImage.getRGB(arg0,arg1);
	}

	@Override
	public int getWidth() {
		return bufferedImage.getWidth();
	}

}

 运行main界面:(结果)

到此,用QR Code生成和解析二维码结束。代码不多,但是重在理解。理解比敲代码有用多了。

推荐以下这两篇文章,非常好,是个很好的学习资料,

二维码的生成细节和原理https://coolshell.cn/articles/10590.html

java——基于zxing的二维码生成器https://www.jianshu.com/p/7ae3b7002530

这两篇都非常的不错,推荐大家去看看,对二维码更深一层的了解。

猜你喜欢

转载自blog.csdn.net/qq_41879385/article/details/81429376