二維碼功能實現(xiàn)

一、應(yīng)用場景

用戶A從契約鎖WEB端分享合同二維碼給合同相關(guān)的人員B,用戶B使用契約鎖手機客戶端進行掃碼簽署。

二、技術(shù)選型

這里選擇Zxing有如下原因:

  • 開源
  • 文檔完善,用戶量大
  • google出品

三、Zxing接入步驟

3.1 基本概念

Zxing的二維碼功能有兩部分組成:圖片獲取+圖片解析

3.2 圖片獲取-掃描

核心思路:通過重寫Camera的預(yù)覽回調(diào)類:Camera.PreviewCallback,當存在預(yù)覽幀(preview frame)時調(diào)用onPreviewFrame方法獲取圖片。

3.2.1 自定義的預(yù)覽回調(diào)方法:

public final class PreviewCallback implements Camera.PreviewCallback {
 
    ...
 
    @Override
    public void onPreviewFrame(byte[] data, Camera camera) {
        //得到當前圖像像素的字節(jié)數(shù)組data,進行掃描框大小的裁剪,將裁剪后的圖片(二維碼)調(diào)用圖片解析庫,獲取解析結(jié)果
    }
 
}

3.2.2 為Camera添加上面的預(yù)覽回調(diào):

Camera camera;
PreviewCallback previewCallback;
  
...
  
if (Build.VERSION.SDK_INT > 3) {
    //考慮到我們app最低兼容版本為API15,使用setOneShotPreviewCallback方法
    camera.setOneShotPreviewCallback(previewCallback);
} else {
    camera.setPreviewCallback(previewCallback);
}

3.3 圖片解析

Zxing圖片解析功能在core文件夾中,去除掉里面的測試代碼模塊,生成jar包。

3.3.1 根據(jù)圖片,調(diào)用圖片解析方法:

/**
 * 圖片解析
 *
 * @param data 圖像像素的字節(jié)數(shù)組data
 * @param width 圖像寬
 * @param height 圖像高
 */
private void decode(byte[] data, int width, int height) {
    Result rawResult = null;
 
    ...
 
    PlanarYUVLuminanceSource source = CameraManager.get().buildLuminanceSource(rotatedData, width, height);
    BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
    rawResult = multiFormatReader.decodeWithState(bitmap);
     
    //rawResult.getText()便是獲得的解析結(jié)果
}

四、周邊技術(shù)點

在主要技術(shù)點周邊還有預(yù)覽圖片的裁剪功能,解析失敗后的Camera重試,圖片的旋轉(zhuǎn)都需要完成,本地圖片的獲取。

五、示例代碼下載

https://github.com/zhufeng1222/QRCodeScan

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 掃描二維碼- 功能實現(xiàn) 掃描二維碼- 功能實現(xiàn)(讀取二維碼) <- OC 導入框架#import 實現(xiàn)步驟及代碼/...
    翻這個墻閱讀 1,449評論 0 0
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,725評論 25 709
  • 二維碼掃描最近兩年簡直是風靡移動互聯(lián)網(wǎng)時代,尤其在國內(nèi)發(fā)展神速。圍繞條碼掃碼功能,首先說說通過本文你可以知道啥。一...
    55book閱讀 4,331評論 0 1
  • 張清的日精進第189天 家里沒有貓砂了,今天到康康店里準備帶兩袋回家。結(jié)果發(fā)現(xiàn)貨架上經(jīng)常用那款貓砂沒有了,隨口問了...
    kiyoi2017閱讀 159評論 0 1

友情鏈接更多精彩內(nèi)容