• Java二维码生成与解码



     
    基于google zxing 的Java二维码生成与解码
     
    一、添加Maven依赖(解码时需要上传二维码图片,所以需要依赖文件上传包)
    <!-- google二维码工具 -->
    <dependency>
     <groupId>com.google.zxing</groupId>
     <artifactId>javase</artifactId>
     <version>3.1.0</version>
    </dependency>
    
    <!-- 文件上传 -->
    <dependency>
     <groupId>commons-fileupload</groupId>
     <artifactId>commons-fileupload</artifactId>
     <version>1.3.1</version>
    </dependency>
    <dependency>
     <groupId>commons-io</groupId>
     <artifactId>commons-io</artifactId>
     <version>2.4</version>
    </dependency>

    二、创建生成二维码接口(接口参数为二维码内容,通常是URL)

    /**
     * 生成二维码
     * google zxing 实现
     * @param text
     * @return
     */
    @RequestMapping(value = "/qrcode/encode", method = RequestMethod.POST)
    public void encodeQrCode(String text, HttpServletResponse response) {
       try {
          // 设置二维码参数
          Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
          hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
          BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, 150, 150, hints);
          //返回二维码
          MatrixToImageWriter.writeToStream(bitMatrix, "jpg", response.getOutputStream());
       } catch (Exception e) {
          e.printStackTrace();
       }
    }

    三、创建二维码解码接口(直接返回解码后的二维码内容)

    /**
     * 二维码图片解码
     * google zxing 实现
     * @param qrImg
     * @return
     */
    @RequestMapping(value = "/qrcode/decode", method = RequestMethod.POST)
    public String decodeQrCode(MultipartFile qrImg) {
       if (!qrImg.isEmpty()) {
          try {
             BufferedImage image = ImageIO.read(qrImg.getInputStream());
    
             BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));
    
             // 定义二维码的参数:
             HashMap<DecodeHintType, Object> hints = new HashMap<>();
             // 定义字符集
             hints.put(DecodeHintType.CHARACTER_SET, "utf-8");
    
             Result result = new MultiFormatReader().decode(binaryBitmap, hints);
    
             return result.getText();
          } catch (Exception e) {
             e.printStackTrace();
          }
       }
    
       return null;
    }
  • 相关阅读:
    抽象类与抽象方法
    PCB设计铜铂厚度、线宽和电流关系
    单层或双层板(PCB)减少环路面积
    电源模块布局考虑因素总结
    传感器信号处理电路
    共模电压和差模电压
    采样电阻选型
    电源防反接保护电路
    MOSFET驱动电路
    自相关与偏自相关
  • 原文地址:https://www.cnblogs.com/gdufs/p/7236205.html
Copyright © 2020-2023  润新知