如何生成二维码代码详解

来源:互联网 发布:小米手环无法同步数据 编辑:程序博客网 时间:2024/06/14 03:27

如何生成二维码代码详解,具体实现可以查看原文http://my.oschina.net/mkh/blog/151633

1. [代码][Java]代码     跳至 [1] [全屏预览]

?
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
    importjava.awt.image.BufferedImage;
    importjava.io.File;
    importjava.io.IOException;
    importjava.util.Hashtable;
    importjava.util.Scanner;
    importjavax.imageio.ImageIO;
    importcom.google.zxing.BarcodeFormat;
    importcom.google.zxing.BinaryBitmap;
    importcom.google.zxing.DecodeHintType;
    importcom.google.zxing.LuminanceSource;
    importcom.google.zxing.MultiFormatReader;
    importcom.google.zxing.MultiFormatWriter;
    importcom.google.zxing.Reader;
    importcom.google.zxing.ReaderException;
    importcom.google.zxing.Result;
    importcom.google.zxing.client.j2se.BufferedImageLuminanceSource;
    importcom.google.zxing.client.j2se.MatrixToImageWriter;
    importcom.google.zxing.common.BitMatrix;
    importcom.google.zxing.common.HybridBinarizer;
        
    publicclass TestEnDeCode {
        
        /**
         *
         */
        publicTestEnDeCode() {
            // TODO Auto-generated constructor stub
        }
        
        /**
         * @param args
         */
        publicstatic void main(String[] args) {
            TestEnDeCode t=newTestEnDeCode();
            Scanner in = newScanner(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 将该二维矩阵转换成图片
         * */
        publicvoid encode(String str, String path) {
            try{
//                String str = "http://www.baidu.com百度看看";// 二维码内容
//                String path = "D:/Qr_pics/test7.png"; //二维码图片生成 路径及名称
                BitMatrix byteMatrix;
                byteMatrix = newMultiFormatWriter().encode(newString(str.getBytes("UTF-8"),"UTF-8"), BarcodeFormat.QR_CODE, 800,800);//将文字转换成二维矩阵,并设置矩阵大小,这里的矩阵大小就是后面生成的图片像素大小
                File file = newFile(path);//新建矩阵文件
                MatrixToImageWriter.writeToFile(byteMatrix,"gif", file);//将矩阵文件转换成图片文件
            }catch(Exception e) {
                e.printStackTrace();
            }
        }
        
        /*
         * 解码:
         * 1 将图片反解码为二维矩阵
         * 2 将该二维矩阵解码为内容
         * */
        publicvoid decode(String imgPath) {
            try{
                Reader reader = newMultiFormatReader();
//                String imgPath = "D:/Qr_pics/test7.png";//获取即将被解码图片的路径
                File file = newFile(imgPath);//获取该图片文件
                BufferedImage image;
                try{
                    image = ImageIO.read(file);
                    if(image == null) {
                        System.out.println("Could not decode image");
                    }
                    LuminanceSource source = newBufferedImageLuminanceSource(image);
                    BinaryBitmap bitmap = newBinaryBitmap(newHybridBinarizer(source));
                    Result result;
                    Hashtable hints = newHashtable();//将图片反解码为二维矩阵
                    hints.put(DecodeHintType.CHARACTER_SET,"UTF-8");
                    result = newMultiFormatReader().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());
            }
        }
        
    }

0 0