准备工作 下载jar
http://www.swetake.com/qrcode/java/qr_java.html
https://zh.osdn.net/projects/qrcode/downloads/28391/qrcode.zip/
jar下载完毕后新建项目
一 生成二维码,新建类CreateQRCode.java
package com.qrcode;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import com.swetake.util.Qrcode;
public class CreateQRCode {
public static void main(String[] args) throws Exception {
Qrcode x=new Qrcode();
x.setQrcodeErrorCorrect('M'); //M代表纠错等级
x.setQrcodeEncodeMode('B'); //A代表a-Z,B代表其他
x.setQrcodeVersion(7); //版本
int width = 67+12*(7-1);
int height = 67+12*(7-1);
String qrData = "Hello World";
BufferedImage bufferdImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D gs = bufferdImage.createGraphics();
gs.setBackground(Color.BLACK);
gs.setColor(Color.WHITE);
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,3,3);
}
}
}
}
gs.dispose();
bufferdImage.flush();
ImageIO.write(bufferdImage, "png", new File("E:/code/img.png"));
}
}
二 解析二维码
新建工具类 MYQRCodeImage.java
package com.qrcode;
import java.awt.image.BufferedImage;
import jp.sourceforge.qrcode.data.QRCodeImage;
public class MYQRCodeImage implements QRCodeImage {
BufferedImage bufferedImage;
public MYQRCodeImage(BufferedImage bufferedImage){
this.bufferedImage = bufferedImage;
}
@Override
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();
}
}
新建解析类ReadQRCode.java
package com.qrcode;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import jp.sourceforge.qrcode.QRCodeDecoder;
public class ReadQRCode {
public static void main(String[] args) throws Exception {
File file = new File("E:/code/img.png");
BufferedImage bufferedImage = ImageIO.read(file);
QRCodeDecoder codeDecoder = new QRCodeDecoder();
String result = new String(codeDecoder.decode(
new MYQRCodeImage(bufferedImage)),"gb2312");
System.out.println(result);
}
}
关于解析的时候报错:Invalid number of Finder Pattern detected 是因为生成二维码的时候设置的图片长宽过大,而二维码只占了其中左上角一部分,导致解析出错。只需调整长宽即可。
拓展:也可以使用jQuery方式生成二维码,参考https://github.com/jeromeetienne/jquery-qrcode
https://www.cnblogs.com/prayjourney/p/13899306.html https://www.cnblogs.com/jing5464/p/9951198.html