Java 基於zxing開源專案生成二維碼以及二維碼解析譯碼
阿新 • • 發佈:2018-12-09
基於zxing3.3.3,點選進行跳轉到github的zxing開源專案下載開源專案檔案
JDK版本為1.8
注意:
1、二維碼掃描出來的網址顯示的是文字而不是連結網站的原因:沒有在網址前面加http://或https://
例如:將www.baidu.com更改為https://www.baidu.com
2、實現二維碼掃描下載安裝軟體(以安卓為例)
apk下載安卓網址儘量寫成:http://www.hern.com/mobile/appdown,不要寫成(這種方式在部分軟體上會出現不安全警告,例如微信和QQ的掃一掃,但是這種方式是正確的,只是不是本系(騰訊系)軟體而已):http://www.hern.com/mobile/hern.apk
3、實現二維碼名片
需要藉助VCard標準通訊簿基本格式實現
生成二維碼:
package com.zxing; import java.util.*; import java.io.File; import java.math.*; import java.net.*; import java.nio.file.Path; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import java.awt.*; /* *作者:Hern *生成二維碼圖片 * */ public class CreateQRCode { private static final int width = 300;//設定二維碼的寬度 private static final int height = 300;//設定二維碼的高度 private static final String format = "jpg";//設定二維碼的格式 private static final String url1 = "D:/QRCode/QRCode1.jpg"; private static final String url2 = "D:/QRCode/QRCode2.jpg"; private static final Path file1 = new File(url1).toPath();//設定二維碼的儲存地址 private static final Path file2 = new File(url2).toPath(); public static void main(String[] args) { // TODO Auto-generated method stub //定義二維碼引數 HashMap hints = new HashMap<>(); hints.put(EncodeHintType.CHARACTER_SET, "utf-8");//設定編碼格式 hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);//設定糾錯能力,糾錯級別(L 7%、M 15%、Q 25%、H 30%) hints.put(EncodeHintType.MARGIN, 5);//設定邊距 try { URL content = new URL("https://blog.csdn.net/qq_36761831/article/details/84075497");//設定顯示網頁地址 String str = "作者是Hern,基於GitHub開源專案生成的二維碼\n"+"糾錯能力最低為75%,本人測試最高糾錯能力測試為82.35%\n"+"編碼採用UTF-8格式\n"+"生成的二維碼格式為jpg\n";//設定顯示的內退 BitMatrix bitMatrix1 = new MultiFormatWriter().encode(str, BarcodeFormat.QR_CODE, width, height, hints);//生成二維碼 BitMatrix bitMatrix2 = new MultiFormatWriter().encode(content.toString(), BarcodeFormat.QR_CODE, width, height, hints);//生成二維碼 MatrixToImageWriter.writeToPath(bitMatrix1, format, file1);//將二維碼寫入到指定資料夾中 MatrixToImageWriter.writeToPath(bitMatrix2, format, file2);//將二維碼寫入到指定資料夾中 System.out.println("成功建立二維碼\n"+"二維碼的檔案儲存位置是:"+url1+" "+url2); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
解析二維碼(二維碼譯碼):
package com.zxing; import com.google.zxing.*; import com.google.zxing.client.j2se.BufferedImageLuminanceSource; import com.google.zxing.common.HybridBinarizer; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.*; import java.util.HashMap; import javax.imageio.ImageIO; public class ReadQRCode { public static void main(String[] args) { // TODO Auto-generated method stub try { HashMap hints = new HashMap<>(); hints.put(EncodeHintType.CHARACTER_SET, "utf-8");//設定編碼格式 File file = new File("D:/QRCode/QRCode1.jpg");//檔案的讀取路徑 BufferedImage image = ImageIO.read(file);//讀取圖片 BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));//轉換成點陣圖形式 MultiFormatReader formatReader = new MultiFormatReader(); Result result = formatReader.decode(binaryBitmap, hints);//進行譯碼 System.out.println("二維碼的識別結果是:"+result.toString()); System.out.println("二維碼格式型別:"+result.getBarcodeFormat()); System.out.println("二維碼文字內容:"+result.getText()); System.out.println("二維碼的編碼數:"+result.getNumBits()); System.out.println("二維碼時間截點是:"+result.getTimestamp()); } catch (NotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }