本文主要時通過Java語言,來實現二維碼生成與獲取,涉及zxing(谷歌家的)的兩個核心jar包。
二維碼的生成
package com.epoch.ccpayment.utils;
import java.io.File;
import java.nio.file.Path;
import java.util.HashMap;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
public class CreateQR {
public static void main(String[] args) {
create_code();
}
public static void create_code() {
//寬
int width = 300;
//高
int height = 300;
//圖片格式
String format = "png";
//內容
String content = "http://www.epoch.cn/";
HashMap<EncodeHintType, Comparable> hm = new HashMap<EncodeHintType, Comparable>();
//1設置編碼格式
hm.put(EncodeHintType.CHARACTER_SET, "UTF-8");
//2設置四周的邊:0-7個等級
hm.put(EncodeHintType.MARGIN, 2);
//糾錯等級(容錯率):Q、M、L、H
hm.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
//產生二維碼
try {
BitMatrix bm = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hm);
Path file = new File("D:\\QRCodeImage\\qr.png").toPath();
MatrixToImageWriter.writeToPath(bm, format, file);
System.out.println("二維碼創建成功!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
解析二維碼的內容
package com.epoch.ccpayment.utils;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import com.google.zxing.Binarizer;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.NotFoundException;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.HybridBinarizer;
public class ReadQR {
public static void main(String[] args) throws NotFoundException, IOException {
readZxing();
}
private static void readZxing() throws IOException, NotFoundException {
MultiFormatReader read = new MultiFormatReader();
File file = new File("D:\\QRCodeImage\\qr.png");
BufferedImage image = ImageIO.read(file);
Binarizer binarizer = new HybridBinarizer(new BufferedImageLuminanceSource(image));
BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);
Result res = read.decode(binaryBitmap);
System.out.println(res.toString());
System.out.println(res.getBarcodeFormat());
System.out.println(res.getText());
}
}
本文所涉及到zxing的兩個核心jar包,一個是core - 3.3.2.jar;另一個是javase-3.3.2.jar,親測可用
core3.3.2 點擊此處直接獲取core3.3.2核心的jar包
<!-- https://mvnrepository.com/artifact/com.google.zxing/core -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.2</version>
</dependency>
javase3.3.2 點擊此處直接獲取javase3.3.2核心的jar包
<!-- https://mvnrepository.com/artifact/com.google.zxing/javase -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.3.2</version>
</dependency>