二维码分为好多种,我们最常用的是qrcode类型的二维码,以下有三种生成方式以及解析方式:
附所需jar包或者js地址
第一种:依赖qrcode.jar
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.UnsupportedEncodingException;
import javax.imageio.ImageIO;
import com.swetake.util.Qrcode;
/**获取qrcode jar包 https://osdn.jp/projects/qrcode
* 生成qrcode二维码
* @author fangyi
*
*/
public class CreateQrCode {
public static void main(String[] args) throws Exception {
Qrcode qrcode= new Qrcode();
qrcode.setQrcodeErrorCorrect('M');//纠错等级
qrcode.setQrcodeEncodeMode('B');//N代表数字 A代表字母 B代表其他
qrcode.setQrcodeVersion(7);//版本
String qrData ="www.baidu.com";//二维码信息内容
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 = qrData.getBytes("gb2312");//编码防止有中文
if (0 < d.length && d.length<120) {
boolean[][] s = qrcode.calQrcode(d);
for (int i = 0; i < s.length; i++) {
for (int j = 0; j < s.length; j++) {
if(s[j][i]){
gs.fillRect(i*3+pixoff, j*3+pixoff, 3, 3);
}
}
}
}
//关闭资源,并保存文件
gs.dispose();
bufferedImage.flush();
ImageIO.write(bufferedImage, "png", new File("D:/qrcode.jpg"));//输出到指定地方
}
}
读取指定的二维码:
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import jp.sourceforge.qrcode.QRCodeDecoder;
/**
* 读取制定路径下的qrcode信息
* @author fangyi
*
*/
public class ReaderQrcode {
public static void main(String[] args) throws IOException {
//指定的二维码文件路径
File file= new File("D:/jqueryqrcode.png");
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();
}
}
import java.awt.image.BufferedImage;
import jp.sourceforge.qrcode.data.QRCodeImage;
/**
* 自定义QRCodeImage类实现QRCodeImage 供读取时所用
* @author fangyi
*
*/
public class MyQRCodeImage implements QRCodeImage {
BufferedImage bufferedImage ;
public MyQRCodeImage(BufferedImage bufferedImage) {