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 运行结果:

  • 相关阅读:
    shell color
    mac os develop
    git 实用命令
    FlexSlider插件的详细设置参数 http://www.woothemes.com/flexslider/
    å∫ç∂´ƒ©˙ˆ∆˚¬µ˜øπœ®ß†¨√∑≈¥Ω who know?
    apple mac 下使用机械键盘的办法,键盘映射工具软件,apple mac Mechanical keyboard
    地图比例尺与高德地图中的缩放级别(0-20)的映射关系与转换方法
    【转】ViewPager 一屏显示多个子页面
    Android中解析XML格式数据的方法
    Linux 中的 Service
  • 原文地址:https://www.cnblogs.com/jameslif/p/4076669.html
Copyright © 2011-2022 走看看