使用zxing實現二維碼,並解析二維碼
阿新 • • 發佈:2019-01-26
使用zxing生成二維碼,會比較簡單。很適合初學者學習。
package com.code; 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; /** * * @author 謝財盛 * 檔名:QRcode.java * 時間日期:2018年7月29日下午11:10:04 * 作用:TODO * 版本號:1.0 */ public class Zxing { public static void main(String[] args) { int width = 500; //設定二維碼寬 int height = 500; //設定二維碼高 String format = "png"; //二維碼的格式 String conten = "www.baidu.com"; //二維碼的內容(可以是文字) //定義二維碼引數 HashMap hamp = new HashMap(); hamp.put(EncodeHintType.CHARACTER_SET,"utf-8"); hamp.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); hamp.put(EncodeHintType.MARGIN,2); try { BitMatrix bitMatrix = new MultiFormatWriter().encode(conten, BarcodeFormat.QR_CODE, width, height,hamp); Path file = new File("D:/code/img1.png").toPath(); MatrixToImageWriter.writeToPath(bitMatrix, format, file); } catch (Exception e) { e.printStackTrace(); } } }
注意:如果報錯java.io.FileNotFoundException: D:\abc\img1.png (系統找不到指定的路徑。)。說明在你的這個盤裡面沒有這個檔案,所以再執行這個main之前,要去D盤先建一個code資料夾。
接下來實現使用zxing來解析二維碼:
package com.code; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.HashMap; import javax.imageio.ImageIO; import com.google.zxing.BinaryBitmap; import com.google.zxing.EncodeHintType; 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 ReadZxing { public static void main(String[] args) { try { MultiFormatReader formatReader = new MultiFormatReader(); File file = new File("D:/code/img1.png"); //這個是上面我們生成的二維碼的路徑 BufferedImage image = ImageIO.read(file); BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image))); //定義二維碼引數 HashMap hints = new HashMap(); hints.put(EncodeHintType.CHARACTER_SET,"utf-8"); Result result = formatReader.decode(binaryBitmap, hints); System.out.println("解析結果:"+result.toString()); System.out.println("二維碼格式型別:"+result.getBarcodeFormat()); System.out.println("二維碼文字內容:"+result.getText()); } catch (NotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
執行類,結果:
二維碼內容是www.baidu.com,文字也可以。
推薦以下這兩篇文章,非常好,是個很好的學習資料,
這兩篇都非常的不錯,推薦大家去看看,對二維碼更深一層的瞭解。