java 生成和解析二维码

  1 public class QRCode {
  2     /**
  3      * 解析二维码(QRCode)
  4      * @param imgPath
  5      * @return
  6      */
  7     public static  String decoderQRCode(String imgPath) {  
  8         // QRCode 二维码图片的文件  
  9         File imageFile = new File(imgPath);  
 10         BufferedImage bufImg = null;  
 11         String content = null;  
 12         try {  
 13             bufImg = ImageIO.read(imageFile);  
 14             QRCodeDecoder decoder = new QRCodeDecoder();  
 15             content = new String(decoder.decode(new QRCodeImageBean(bufImg)), "utf-8");   
 16         } catch (IOException e) {  
 17             System.out.println("Error: " + e.getMessage());  
 18             e.printStackTrace();  
 19         } catch (DecodingFailedException dfe) {  
 20             System.out.println("Error: " + dfe.getMessage());  
 21             dfe.printStackTrace();  
 22         }  
 23         return content;  
 24     }  
 25     /**  
 26      * 生成二维码(QRCode)图片  
 27      * @param content 存储内容  
 28      * @param imgPath 图片路径  
 29      * @param imgType 图片类型  
 30      */    
 31     public static void encoderQRCode(String content, String imgPath, String imgType) {    
 32         encoderQRCode(content, imgPath, imgType, 7);    
 33     }  
 34     /**  
 35      * 生成二维码(QRCode)图片  
 36      * @param content 存储内容  
 37      * @param imgPath 图片路径  
 38      * @param imgType 图片类型  
 39      * @param size 二维码尺寸  
 40      */    
 41     public static void encoderQRCode(String content, String imgPath, String imgType, int size) {    
 42         try {    
 43             BufferedImage bufImg = qRCodeCommon(content, imgType, size);    
 44                 
 45             File imgFile = new File(imgPath);    
 46             // 生成二维码QRCode图片    
 47             ImageIO.write(bufImg, imgType, imgFile);    
 48         } catch (Exception e) {    
 49             e.printStackTrace();    
 50         }    
 51     }  
 52       
 53     /**  
 54      * 生成二维码(QRCode)图片的公共方法  
 55      * @param content 存储内容  
 56      * @param imgType 图片类型  
 57      * @param size 二维码尺寸  
 58      * @return  
 59      */    
 60     private static BufferedImage qRCodeCommon(String content, String imgType, int size) {    
 61         BufferedImage bufImg = null;    
 62         try {    
 63             Qrcode qrcodeHandler = new Qrcode();    
 64             // 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小    
 65             qrcodeHandler.setQrcodeErrorCorrect('M');    
 66             qrcodeHandler.setQrcodeEncodeMode('B');    
 67             // 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大    
 68             qrcodeHandler.setQrcodeVersion(size);    
 69             // 获得内容的字节数组,设置编码格式    
 70             byte[] contentBytes = content.getBytes("utf-8");    
 71             // 图片尺寸    
 72             int imgSize = 67 + 12 * (size - 1);    
 73             bufImg = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_INT_RGB);    
 74             Graphics2D gs = bufImg.createGraphics();    
 75             // 设置背景颜色    
 76             gs.setBackground(Color.WHITE);    
 77             gs.clearRect(0, 0, imgSize, imgSize);    
 78     
 79             // 设定图像颜色> BLACK    
 80             gs.setColor(Color.BLACK);    
 81             // 设置偏移量,不设置可能导致解析出错    
 82             int pixoff = 2;    
 83             // 输出内容> 二维码    
 84             if (contentBytes.length > 0 && contentBytes.length < 800) {    
 85                 boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);    
 86                 for (int i = 0; i < codeOut.length; i++) {    
 87                     for (int j = 0; j < codeOut.length; j++) {    
 88                         if (codeOut[j][i]) {    
 89                             gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);    
 90                         }    
 91                     }    
 92                 }    
 93             } else {    
 94                 throw new Exception("QRCode content bytes length = " + contentBytes.length + " not in [0, 800].");    
 95             }    
 96             gs.dispose();    
 97             bufImg.flush();    
 98         } catch (Exception e) {    
 99             e.printStackTrace();    
100         }    
101         return bufImg;    
102     }  
103     public static void main(String[] args) {  
104         //生成二维码
105         String imgPath = "d:/测试用二维码";    
106         String encoderContent = "你好,这是测试用例";    108         encoderQRCode(encoderContent, imgPath, "png");    
109         System.out.println("encoder success!!!");
110 
111          //解析二维码
112 //        String imgPath = "D:/测试用二维码.jpg";  114 //        String qrCon = decoderQRCode(imgPath);
115 //        System.out.println("decoder success!!!");  
116 //        System.out.println("二维码内容为:" + qrCon);  
117     }  
118 
119 }        

 

posted @ 2016-06-01 15:56  蚂蚁1  阅读(181)  评论(0编辑  收藏  举报