1、下载jar包( jdk1.7)
链接:https://pan.baidu.com/s/1LVq_zGsp_Po8V456h1TVmA
提取码:vqyd
2、工具类Utils.java
package test;
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 jp.sourceforge.qrcode.QRCodeDecoder;
import jp.sourceforge.qrcode.data.QRCodeImage;
import com.swetake.util.Qrcode;
/**
* 工具类
* @author Xuan
*
*/
public class Utils {
//解析图片
private static BufferedImage image = null;
//
/**
* 生成二维码
* @param srcValue 值
* @param qrcodePicfilePath 二维码图片生成的路径
*/
public static boolean QrCode_encode(String srcValue, String qrcodePicfilePath){
//计算二维码图片的高宽比
// API文档规定计算图片宽高的方式 ,v是本次测试的版本号
int v =6;
int width = 67 + 12 * (v - 1);
int height = 67 + 12 * (v - 1);
Qrcode x = new Qrcode();
/**
* 纠错等级分为
* level L : 最大 7% 的错误能够被纠正;
* level M : 最大 15% 的错误能够被纠正;
* level Q : 最大 25% 的错误能够被纠正;
* level H : 最大 30% 的错误能够被纠正;
*/
x.setQrcodeErrorCorrect('L');
x.setQrcodeEncodeMode('B');//注意版本信息 N代表数字 、A代表 a-z,A-Z、B代表 其他)
x.setQrcodeVersion(v);
String qrData = srcValue;
try {
//汉字转格式需要抛出异常
byte[] d = qrData.getBytes("utf-8");
//缓冲区
image = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
//绘图
Graphics2D gs = image.createGraphics();
gs.setBackground(Color.WHITE);
gs.setColor(Color.BLACK);
gs.clearRect(0, 0, width, height);
//偏移量
int pixoff = 2;
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();
image.flush();
//输出图片
ImageIO.write(image, "png", new File(qrcodePicfilePath));
} catch (IOException e) {
e.printStackTrace();
return false;
}
System.out.println("二维码生成完毕");
return true;
}
/**
* 解析二维码
* @param qrcodePicfilePath 二维码图片地址
* @return
*/
public static String QrCode_decode(String qrcodePicfilePath) {
System.out.println("开始解析二维码!!");
File imageFile = new File(qrcodePicfilePath);
try {
image = ImageIO.read(imageFile);
} catch (IOException e) {
System.out.println("读取二维码图片失败: " + e.getMessage());
return null;
}
QRCodeDecoder decoder = new QRCodeDecoder();
String decodedData = new String(decoder.decode(new QRCodeImage() {
@Override
public int getWidth() {
return image.getWidth();
}
@Override
public int getPixel(int arg0, int arg1) {
return image.getRGB(arg0, arg1);
}
@Override
public int getHeight() {
return image.getHeight();
}
}));
System.out.println("解析内容如下:"+decodedData);
return decodedData;
}
}
3、测试类
package test;
/**
* 二维码测试类
* @author Xuan
*
*/
public class Generate {
public static void main(String[] args) {
String data = "优快云的小白轩";
//生成二维码
Utils.QrCode_encode(data, "C:\\Users\\Administrator\\Desktop\\xiaoxuan.png");
//解析二维码
Utils.QrCode_decode("C:\\Users\\Administrator\\Desktop\\xiaoxuan.png");
}
}