zoukankan      html  css  js  c++  java
  • JavaUtil_02_二维码的生成与解析

    1.引入jar包

     zxing-core-1.7.jar  :   http://viralpatel.net/blogs/download/jar/zxing-core-1.7.jar

     zxing-javase-1.7.jar :  http://viralpatel.net/blogs/download/jar/zxing-j2se-1.7.jar

    2.工具类—QRCodeUtil.java

      1 package com.ray.util;
      2 
      3 import java.awt.image.BufferedImage;
      4 import java.io.File;
      5 import java.util.Hashtable;
      6 import java.util.Random;
      7 import javax.imageio.ImageIO;
      8 
      9 import com.google.zxing.BarcodeFormat;
     10 import com.google.zxing.Binarizer;
     11 import com.google.zxing.BinaryBitmap;
     12 import com.google.zxing.EncodeHintType;
     13 import com.google.zxing.LuminanceSource;
     14 import com.google.zxing.MultiFormatReader;
     15 import com.google.zxing.MultiFormatWriter;
     16 import com.google.zxing.Result;
     17 import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
     18 import com.google.zxing.client.j2se.MatrixToImageWriter;
     19 import com.google.zxing.common.BitMatrix;
     20 import com.google.zxing.common.HybridBinarizer;
     21 
     22 public class QRCodeUtil {
     23 
     24     /**
     25      * 根据内容,生成指定宽高、指定格式的二维码图片
     26      *
     27      * @param text   内容
     28      * @param width  宽
     29      * @param height 高
     30      * @param format 图片格式
     31      * @return 生成的二维码图片路径
     32      * @throws Exception
     33      */
     34     public static String generateQRCode(String text, int width, int height, String format) throws Exception {
     35         Hashtable<EncodeHintType, Object> hints = new Hashtable<>();
     36         hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
     37         BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height, hints);
     38        
     39         String pathName = "D:/new.png";   //指定输出文件的路径
     40         File outputFile = new File(pathName);
     41         MatrixToImageWriter.writeToFile(bitMatrix, format, outputFile);
     42      
     43         return pathName;
     44     }
     45     
     46     /**
     47      * 随机生成指定长度的验证码
     48      *
     49      * @param length 验证码长度
     50      * @return 生成的验证码
     51      */
     52     public  static String generateNumCode(int length) {
     53         String val = "";
     54         String charStr = "char";
     55         String numStr = "num";
     56         Random random = new Random();
     57 
     58         //参数length,表示生成几位随机数
     59         for (int i = 0; i < length; i++) {
     60 
     61             String charOrNum = random.nextInt(2) % 2 == 0 ? charStr : numStr;
     62             //输出字母还是数字
     63             if (charStr.equalsIgnoreCase(charOrNum)) {
     64                 //输出是大写字母还是小写字母
     65                 int temp = random.nextInt(2) % 2 == 0 ? 65 : 97;
     66                 val += (char) (random.nextInt(26) + temp);
     67             } else if (numStr.equalsIgnoreCase(charOrNum)) {
     68                 val += String.valueOf(random.nextInt(10));
     69             }
     70         }
     71         return val;
     72     }
     73     
     74     /**
     75      * 解析指定路径下的二维码图片
     76      *
     77      * @param filePath 二维码图片路径
     78      * @return
     79      */
     80     public static String parseQRCode(String filePath) {
     81         String content = "";
     82         try {
     83             File file = new File(filePath);
     84             BufferedImage image = ImageIO.read(file);
     85             LuminanceSource source = new BufferedImageLuminanceSource(image);
     86             Binarizer binarizer = new HybridBinarizer(source);
     87             BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);
     88             Hashtable<EncodeHintType, Object> hints = new Hashtable<>();
     89             hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
     90             MultiFormatReader formatReader = new MultiFormatReader();
     91             Result result = formatReader.decode(binaryBitmap,  hints);
     92 
     93             System.out.println("result 为:" + result.toString());
     94             System.out.println("resultFormat 为:" + result.getBarcodeFormat());
     95             System.out.println("resultText 为:" + result.getText());
     96             //设置返回值
     97             content = result.getText();
     98         } catch (Exception e) {
     99             e.printStackTrace();
    100         }
    101         return content;
    102     }
    103     
    104     
    105     
    106     
    107     
    108 }
    View Code

    3.测试类—QRCodeTest.java

     1 package com.ray.test;
     2 
     3 import org.junit.Test;
     4 import com.ray.util.QRCodeUtil;
     5 
     6 
     7 public class QRCodeTest {
     8 
     9     @Test
    10     public void testQRCode(){
    11         //String text = QRCodeUtil.generateNumCode(12);  //随机生成的12位验证码
    12         //System.out.println("随机生成的12位验证码为: " + text);
    13 
    14         String text="你好啊,@¥%2@#$%,//";
    15         System.out.println("text");
    16         int width = 100;    //二维码图片的宽
    17         int height = 100;   //二维码图片的高
    18         String format = "png";  //二维码图片的格式
    19 
    20         try {
    21             //生成二维码图片,并返回图片路径
    22             String pathName = QRCodeUtil.generateQRCode(text, width, height, format);
    23             System.out.println("生成二维码的图片路径: " + pathName);
    24 
    25             String content = QRCodeUtil.parseQRCode(pathName);
    26             System.out.println("解析出二维码的图片的内容为: " + content);
    27         } catch (Exception e) {
    28             e.printStackTrace();
    29         }
    30 
    31 
    32     }
    33 
    34     
    35 
    36 }
    View Code

    参考文章:  Java生成、解析二维码  ( http://www.cnblogs.com/xz-luckydog/p/6402568.html)

  • 相关阅读:
    管道
    linux基本网络配置
    201671010130 201620172 《Java程序设计》第三周学习小结
    201671010130 201620172 《Java程序设计》第二周学习小结
    201671010130 201620172 《Java程序设计》第五周学习小结
    201671010130 201620172 《Java程序设计》首次与Java打交道
    朵的面向对象程序设计课程学习进度条
    201671010130 201620172 《Java程序设计》第六七周学习小结
    201671010130 201620172 《Java程序设计》第四周学习小结
    Note of Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14
  • 原文地址:https://www.cnblogs.com/shirui/p/7474331.html
Copyright © 2011-2022 走看看