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
package  com.qrcode;
import  java.awt.Color; 
import  java.awt.Graphics2D; 
import  java.awt.image.BufferedImage; 
import  java.io.File; 
import  javax.imageio.ImageIO; 
import  com.swetake.util.Qrcode; 
  
public  class  QRCodeGenerator { 
     private  static  QRCodeGenerator qrCodeGenerator =  new  QRCodeGenerator();
     
     private  QRCodeGenerator(){}
     
     public  static  QRCodeGenerator getInstance(){
         return  qrCodeGenerator;
     }
 
     public  void  generatrQRCode(String content, String imgPath) { 
         try 
  
             Qrcode qrcodeHandler =  new  Qrcode(); 
             qrcodeHandler.setQrcodeErrorCorrect( 'M' ); 
             qrcodeHandler.setQrcodeEncodeMode( 'B' ); 
             qrcodeHandler.setQrcodeVersion( 7 ); 
  
             byte [] contentBytes = content.getBytes(); 
  
             BufferedImage bufImg =  new  BufferedImage( 140 140 , BufferedImage.TYPE_INT_RGB); 
  
             Graphics2D gs = bufImg.createGraphics(); 
  
             gs.setBackground(Color.WHITE); 
             gs.clearRect( 0 0 140 140 ); 
  
             // 设定图像颜色> BLACK 
             gs.setColor(Color.BLACK); 
  
             // 设置偏移量 不设置可能导致解析出错 
             int  pixoff =  2
             // 输出内容> 二维码 
             if  (contentBytes.length >  0  && contentBytes.length <  120 ) { 
                 boolean [][] codeOut = qrcodeHandler.calQrcode(contentBytes); 
                 for  ( int  i =  0 ; i < codeOut.length; i++) { 
                     for  ( int  j =  0 ; j < codeOut.length; j++) { 
                         if  (codeOut[j][i]) { 
                             gs.fillRect(j *  3  + pixoff, i *  3  + pixoff,  3 3 ); 
                        
                    
                
             else 
                 System.err.println( "QRCode content bytes length = " +contentBytes.length +  " not in [ 0,120 ]. " ); 
            
  
             gs.dispose(); 
             bufImg.flush(); 
  
             File imgFile =  new  File(imgPath); 
  
             // 生成二维码QRCode图片 
             ImageIO.write(bufImg,  "png" , imgFile); 
  
         catch  (Exception e) { 
             throw  new  RuntimeException(e);
        
  
    
}

2. 二维码解析器

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
package  com.qrcode;
import  java.awt.image.BufferedImage;
import  java.io.File;
import  javax.imageio.ImageIO;
import  jp.sourceforge.qrcode.QRCodeDecoder;
import  jp.sourceforge.qrcode.data.QRCodeImage;
  
public  class  QRCodeParser { 
     private  static  QRCodeParser qrCodeParser =  new  QRCodeParser();
     
     private  QRCodeParser(){}
     
     public  static  QRCodeParser getInstance(){
         return  qrCodeParser;
     }
  
     public  String parseQRCode(String imgPath) { 
         File imageFile =  new  File(imgPath); 
  
         BufferedImage bufImg =  null
         String decodedData =  null
         try 
             bufImg = ImageIO.read(imageFile); 
  
             QRCodeDecoder decoder =  new  QRCodeDecoder(); 
             decodedData =  new  String(decoder.decode( new  J2SEImage(bufImg))); 
  
         catch  (Exception e) { 
            throw  new  RuntimeException(e);
        
         return  decodedData; 
    
  
  
     private  class  J2SEImage  implements  QRCodeImage { 
         private  BufferedImage bufImg; 
  
         public  J2SEImage(BufferedImage bufImg) { 
             this .bufImg = bufImg; 
        
  
         public  int  getWidth() { 
             return  bufImg.getWidth(); 
        
  
         public  int  getHeight() { 
             return  bufImg.getHeight(); 
        
  
         public  int  getPixel( int  x,  int  y) { 
             return  bufImg.getRGB(x, y); 
        
  
    
}

3.测试

1
2
3
4
5
6
7
8
9
10
11
12
package  com.qrcode;
 
public  class  Main {
     public  static  void  main(String[] args) {
         String content= "这是我的QRCode" ;
         String imgPath= "E:/mine/j2ee/QRCode/src/main/java/abc.png" ;
         QRCodeGenerator.getInstance().generatrQRCode(content, imgPath);
         
         String result = QRCodeParser.getInstance().parseQRCode(imgPath);
         System.out.println(result);
     }
}


附件是二维码生成,解析所需的jars.