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 = "CSDN的小白軒";
//生成二維碼
Utils.QrCode_encode(data, "C:\\Users\\Administrator\\Desktop\\xiaoxuan.png");
//解析二維碼
Utils.QrCode_decode("C:\\Users\\Administrator\\Desktop\\xiaoxuan.png");
}
}