windows8运行zxing源码 生成与解码二维码 详解(含注释与图解可直接运行)

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(" 解码结果: "+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 运行结果:

原文地址:https://www.cnblogs.com/jameslif/p/4076669.html