生成二維碼的工具類以下:java
/**
* QrCodeUtil.java
* com.juyo.visa.common.util
* Copyright (c) 2017,
*/
package com.btzh.mis.dep.data.center.util;
import com.google.zxing.*;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import lombok.Data;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* TODO(這裏用一句話描述這個類的做用)
* <p>
* TODO(這裏描述這個類補充說明 – 可選)
*
* @author
* @Date 2017年12月9日
*/
@Data
public class QrCodeUtil {
private String fileContextPath;
/**
* 獲得32位的uuid
* @return
*/
public static String getUUID32(){
return UUID.randomUUID().toString().replace("-", "").toLowerCase();
}
/**
* 生成二維碼
* <p>
* TODO(這裏描述這個方法詳情– 可選)
*
* @param content 二維碼的內容
* @param filePath臨時文件的路徑
*/
public void encodeQrCode(String content, String filePath) {
try {
//須要建立一個臨時文件,爲了防止出現併發問題,現把二維碼文件名用16爲的UUID來命名
String fileName = getUUID32() + ".png";
int width = 300; //二維碼圖像寬度
int height = 300; // 二維碼圖像高度
String format = "png";// 圖像類型
Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);// 生成矩陣
Path path = FileSystems.getDefault().getPath(filePath, fileName);
//因爲生成二維碼的方法沒有返回值,現將二維碼臨時路徑進行保存
this.fileContextPath = path.toString();
MatrixToImageWriter.writeToPath(bitMatrix, format, path);// 輸出圖像
//System.out.println("輸出成功.");
} catch (Exception e) {
// TODO: handle exception
}
}
/**
* 解析二維碼
*/
public void decodeQrCode(String filePath) {
BufferedImage image;
try {
image = ImageIO.read(new File(filePath));
LuminanceSource source = new BufferedImageLuminanceSource(image);
Binarizer binarizer = new HybridBinarizer(source);
BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);
Map<DecodeHintType, Object> hints = new HashMap<DecodeHintType, Object>();
hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");
Result result = new MultiFormatReader().decode(binaryBitmap, hints);// 對圖像進行解碼
System.out.println("圖片中內容: ");
System.out.println("author: " + result.getText());
System.out.println("圖片中格式: ");
System.out.println("encode: " + result.getBarcodeFormat());
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.測試
public static void main(String [] args){
QrCodeUtil qrCodeUtil = new QrCodeUtil();
//生成二維碼的臨時路徑
String filepath = "D://pdfFile";
//生成二維碼
qrCodeUtil.encodeQrCode("這裏是二維碼的內容", filepath);
//獲取二維碼臨時文件的路徑
String fileContextPath = qrCodeUtil.getFileContextPath();
//獲取到二維碼文件
File file = new File(fileContextPath);
System.out.println("生成了。。。");
}
/**
* QrCodeUtil.java
* com.juyo.visa.common.util
* Copyright (c) 2017,
*/
package com.btzh.mis.dep.data.center.util;
import com.google.zxing.*;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import lombok.Data;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* TODO(這裏用一句話描述這個類的做用)
* <p>
* TODO(這裏描述這個類補充說明 – 可選)
*
* @author
* @Date 2017年12月9日
*/
@Data
public class QrCodeUtil {
private String fileContextPath;
/**
* 獲得32位的uuid
* @return
*/
public static String getUUID32(){
return UUID.randomUUID().toString().replace("-", "").toLowerCase();
}
/**
* 生成二維碼
* <p>
* TODO(這裏描述這個方法詳情– 可選)
*
* @param content 二維碼的內容
* @param filePath臨時文件的路徑
*/
public void encodeQrCode(String content, String filePath) {
try {
//須要建立一個臨時文件,爲了防止出現併發問題,現把二維碼文件名用16爲的UUID來命名
String fileName = getUUID32() + ".png";
int width = 300; //二維碼圖像寬度
int height = 300; // 二維碼圖像高度
String format = "png";// 圖像類型
Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);// 生成矩陣
Path path = FileSystems.getDefault().getPath(filePath, fileName);
//因爲生成二維碼的方法沒有返回值,現將二維碼臨時路徑進行保存
this.fileContextPath = path.toString();
MatrixToImageWriter.writeToPath(bitMatrix, format, path);// 輸出圖像
//System.out.println("輸出成功.");
} catch (Exception e) {
// TODO: handle exception
}
}
/**
* 解析二維碼
*/
public void decodeQrCode(String filePath) {
BufferedImage image;
try {
image = ImageIO.read(new File(filePath));
LuminanceSource source = new BufferedImageLuminanceSource(image);
Binarizer binarizer = new HybridBinarizer(source);
BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);
Map<DecodeHintType, Object> hints = new HashMap<DecodeHintType, Object>();
hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");
Result result = new MultiFormatReader().decode(binaryBitmap, hints);// 對圖像進行解碼
System.out.println("圖片中內容: ");
System.out.println("author: " + result.getText());
System.out.println("圖片中格式: ");
System.out.println("encode: " + result.getBarcodeFormat());
} catch (Exception e) {
e.printStackTrace();} }}