通過Java實現二維碼的生成與獲取

本文主要時通過Java語言,來實現二維碼生成與獲取,涉及zxing(谷歌家的)的兩個核心jar包。

二維碼的生成

package com.epoch.ccpayment.utils;

import java.io.File;
import java.nio.file.Path;
import java.util.HashMap;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;


public class CreateQR {
   public static void main(String[] args) {
        create_code();
    }

   public static void create_code() {
      //寬
      int width = 300;            
      //高
      int height = 300;            
      //圖片格式
      String format = "png";        
      //內容
      String content = "http://www.epoch.cn/";


      HashMap<EncodeHintType, Comparable> hm = new HashMap<EncodeHintType, Comparable>();

        //1設置編碼格式
        hm.put(EncodeHintType.CHARACTER_SET, "UTF-8");        
        //2設置四周的邊:0-7個等級
        hm.put(EncodeHintType.MARGIN, 2);                    
        //糾錯等級(容錯率):Q、M、L、H
        hm.put(EncodeHintType.ERROR_CORRECTION,    ErrorCorrectionLevel.M);    

        //產生二維碼
        try {
            BitMatrix bm =  new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hm);
            Path file = new File("D:\\QRCodeImage\\qr.png").toPath();
            MatrixToImageWriter.writeToPath(bm, format, file);
            System.out.println("二維碼創建成功!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

解析二維碼的內容

package com.epoch.ccpayment.utils;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import com.google.zxing.Binarizer;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.NotFoundException;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.HybridBinarizer;

public class ReadQR {
    public static void main(String[] args) throws NotFoundException, IOException {
        readZxing();
    }

 
    private static void readZxing() throws IOException, NotFoundException {
        MultiFormatReader read = new MultiFormatReader();
        File file = new File("D:\\QRCodeImage\\qr.png");

        BufferedImage image = ImageIO.read(file);
        Binarizer binarizer = new HybridBinarizer(new BufferedImageLuminanceSource(image));
        BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);
        Result res = read.decode(binaryBitmap);

        System.out.println(res.toString());
        System.out.println(res.getBarcodeFormat());
        System.out.println(res.getText());
    }
}

本文所涉及到zxing的兩個核心jar包,一個是core - 3.3.2.jar;另一個是javase-3.3.2.jar,親測可用

zxing核心jar包
zxing核心的jar包

core3.3.2    點擊此處直接獲取core3.3.2核心的jar包

<!-- https://mvnrepository.com/artifact/com.google.zxing/core -->
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>core</artifactId>
    <version>3.3.2</version>
</dependency>

javase3.3.2     點擊此處直接獲取javase3.3.2核心的jar包

<!-- https://mvnrepository.com/artifact/com.google.zxing/javase -->
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>javase</artifactId>
    <version>3.3.2</version>
</dependency>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章