如何生成二维码代码详解

如何生成二维码代码详解,具体实现可以查看原文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
     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());
             }
         }
        
     }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值