zoukankan      html  css  js  c++  java
  • 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 运行结果:

  • 相关阅读:
    html5+css3中的background: -moz-linear-gradient 用法 (转载)
    CentOS 安装Apache服务
    Linux 笔记
    CURL 笔记
    Spring Application Context文件没有提示功能解决方法
    LeetCode 389. Find the Difference
    LeetCode 104. Maximum Depth of Binary Tree
    LeetCode 520. Detect Capital
    LeetCode 448. Find All Numbers Disappeared in an Array
    LeetCode 136. Single Number
  • 原文地址:https://www.cnblogs.com/jameslif/p/4076669.html
Copyright © 2011-2022 走看看