1、QR Code( 专利公开,支持中文)
优点:数据密度大、占用空间小,读取速度快
2、PDF417(不支持中文)
3、DM(专利未公开,需支付专利费用)
此次就以QRCode和zxing为例
QRCode:
创建二维码
package com.joydo.QRCode;
import com.swetake.util.Qrcode;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
//生成二维码
public class CreatQRCode {
public static void main(String []args)throws Exception{
Qrcode x=new Qrcode();
x.setQrcodeErrorCorrect('M'); //纠错等级
x.setQrcodeEncodeMode('B'); //N代表数字,A代表a-z,B代表其他字符
x.setQrcodeVersion(7); //版本
String qrData="www.immoc.com";
int width=67+12*(7-1); //固定公式:67+12*(版本号-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(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:/upload/qrcode.png"));
}
}
读取二维码
package com.joydo.QRCode;
import jp.sourceforge.qrcode.data.QRCodeImage;
import java.awt.image.BufferedImage;
public class MYQRCodeImage implements QRCodeImage {
BufferedImage bufferedImage;
public MYQRCodeImage(BufferedImage bufferedImage){
this.bufferedImage=bufferedImage;
}
@Override
public int getWidth() {
return bufferedImage.getWidth();
}
@Override
public int getHeight() {
return bufferedImage.getHeight();
}
@Override
public int getPixel(int i, int j) {
return bufferedImage.getRGB(i,j);
}
}
package com.joydo.QRCode;
import com.swetake.util.Qrcode;
import jp.sourceforge.qrcode.QRCodeDecoder;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
//解析二维码
public class ReadQRCode {
public static void main(String []args) throws Exception{
File file=new File("d:/upload/qrcode.png");
BufferedImage bufferedImage=ImageIO.read(file);
QRCodeDecoder codeDecoder=new QRCodeDecoder();
String result=new String(codeDecoder.decode(new MYQRCodeImage(bufferedImage)),"gb2312");
System.out.println(result);
}
}
zxing看下篇
java生成二维码-zxing
版权声明:本文为qq_39243221原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。