工作之余,练习练习二维码的生成,毕竟这几年二维码这么疯狂。闲话不多说了,来看看二维码的生成和解析过程Java:
首先呢,引入两个jar包:QrCode.jar和qrcode_swtake.jar(网上都有,大家可以搜一下就知道了)
下面看代码就行了(类名就叫CreateQRCode):
/**
* 用来测试
* @param args
*/
public static void main(String[] args) {
String data = "我爱我想爱的人";
/**
* 生成二维码
*/
CreateQRCode.encode(data, "E:/wang/erwei.jpg");
}
/**
* 生成二维码
* @param data
* @param string
* @return
*/
private static boolean encode(String data, String path) {
int MAX_DATA_LENGTH = 200;
byte []d = data.getBytes();
int dataLength = d.length;
int imageWidth = 113;
int imageHeight = imageWidth;
BufferedImage bi = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
g.setBackground(Color.WHITE);
g.clearRect(0, 0, imageWidth, imageHeight);
g.setColor(Color.BLACK);
if(dataLength > 0 && dataLength <= MAX_DATA_LENGTH){
Qrcode qr = new Qrcode();
qr.setQrcodeErrorCorrect('M');
qr.setQrcodeEncodeMode('B');
qr.setQrcodeVersion(5);
boolean [][]b = qr.calQrcode(d);
int qrDataLen = b.length;
for(int i = 0; i < qrDataLen; i++){
for(int j = 0; j < qrDataLen; j++){
if(b[j][i]){
g.fillRect(j*3+2, i*3+2, 3, 3);
}
}
}
System.out.println("二维码生成!");
}else{
System.out.println(dataLength + "大于" + MAX_DATA_LENGTH);
return false;
}
g.dispose();
bi.flush();
File f = new File(path);
String suffix = f.getName().substring(f.getName().indexOf(".")+1,f.getName().length());
System.out.println("二维码输出成功!");
try{
ImageIO.write(bi, suffix, f);
}catch(IOException e){
System.out.println("二维码生成失败"+e.getMessage());
return false;
}
return true;
}
上面就已经成功生成一个带有信息的二维码了!
下面来解析二维码:
main函数中换成CreateQRCode.decode("E:/wang/erwei.jpg");
private static String decode(String path) {
System.out.println("开始解析二维码!");
/*读取二维码图像数据*
*
*/
File imageFile = new File(path);
BufferedImage image = null;
try{
image = ImageIO.read(imageFile);
}catch(IOException e){
System.out.print("读取失败!"+e.getMessage());
return null;
}
/*
* 解二维码
*/
QRCodeDecoder decoder = new QRCodeDecoder();
String decodeData = new String(decoder.decode(new J2SEImageGucas(image)));
System.out.println("解析内容如下:"+decodeData);
return decodeData;
}
其中需要说明的是J2SEImageGucas类需要你自己建:
public class J2SEImageGucas implements QRCodeImage{
BufferedImage image;
public J2SEImageGucas(BufferedImage image){
this.image = image;
}
@Override
public int getHeight() {
return image.getHeight();
}
@Override
public int getPixel(int x, int y) {
return image.getRGB(x, y);
}
@Override
public int getWidth() {
return image.getWidth();
}
}
这样二维码的生成和解析就已经搞定了,是不是很简单!so easy!