1 下载zxing2.1
2 本代码配置环境:eclipse、java1.6、windows8、zxing2.1
3 解压后将文件夹里面core/src下面的com文件夹导入到eclipse工程(工程可以自己建,如QrCode)中,图示如下:
注意:在源码中需要修改其编码配置为UTF-8,否则后面解码后面的文件中中文会乱码,修改图示如下:
4 TestEnDeCode.java源代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
package test;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Hashtable;
import java.util.Scanner;
import javax.imageio.ImageIO;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.Reader;
import com.google.zxing.ReaderException;
import com.google.zxing.Result;
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;
public class TestEnDeCode {
/**
*
*/ public TestEnDeCode() {
// TODO Auto-generated constructor stub }
/**
* @param args
*/ public static void main(String[] args) {
TestEnDeCode t= new TestEnDeCode();
Scanner in = new Scanner(System.in);
System.out.println( "编码内容:" );
String str = in.next(); // String str = "http://www.baidu.com"; String path = "D:/Qr_pics/test7.png" ;
t.encode(str, path);
t.decode(path);
}
/*
* 编码:
* 1 将内容转换成二维矩阵
* 2 将该二维矩阵转换成图片
* */
public void encode(String str, String path) {
try { // String str = "http://www.baidu.com百度看看";// 二维码内容
// String path = "D:/Qr_pics/test7.png"; //二维码图片生成 路径及名称 BitMatrix byteMatrix;
byteMatrix = new MultiFormatWriter().encode( new String(str.getBytes( "UTF-8" ), "UTF-8" ), BarcodeFormat.QR_CODE, 800 , 800 ); //将文字转换成二维矩阵,并设置矩阵大小,这里的矩阵大小就是后面生成的图片像素大小 File file = new File(path); //新建矩阵文件 MatrixToImageWriter.writeToFile(byteMatrix, "gif" , file); //将矩阵文件转换成图片文件 } catch (Exception e) {
e.printStackTrace();
}
}
/*
* 解码:
* 1 将图片反解码为二维矩阵
* 2 将该二维矩阵解码为内容
* */
public void decode(String imgPath) {
try {
Reader reader = new MultiFormatReader(); // String imgPath = "D:/Qr_pics/test7.png";//获取即将被解码图片的路径 File file = new File(imgPath); //获取该图片文件 BufferedImage image;
try {
image = ImageIO.read(file);
if (image == null ) {
System.out.println( "Could not decode image" );
}
LuminanceSource source = new BufferedImageLuminanceSource(image);
BinaryBitmap bitmap = new BinaryBitmap( new HybridBinarizer(source));
Result result;
Hashtable hints = new Hashtable(); //将图片反解码为二维矩阵 hints.put(DecodeHintType.CHARACTER_SET, "UTF-8" );
result = new MultiFormatReader().decode(bitmap, hints); //将该二维矩阵解码成内容 String resultStr = result.getText();
System.out.println( "\n解码结果:\n" +resultStr);
} catch (IOException ioe) {
System.out.println(ioe.toString());
} catch (ReaderException re) {
System.out.println(re.toString());
}
} catch (Exception ex) {
System.out.println(ex.toString());
}
}
}
|
5 运行结果: