Googlezxing:一個多功能的條形碼/二維碼解析庫

一、簡介

Googlezxing是一個開源的、多功能的、支持多種平台的條形碼/二維碼解析庫。它基於Java語言編寫,可以在Android、iOS、Windows、Linux等多個平台上使用,支持多種編程語言的調用。

Googlezxing提供了豐富的解碼能力,支持13種一維條形碼和4種二維碼的解碼,並提供了生成QR代碼的功能。此外,它還提供了一些高級功能,如二維碼識別時的角度矯正、條形碼識別時的多邊形掃描等。

二、快速入門

Googlezxing的使用非常方便,只需要引入相關庫文件即可。以下以Android平台為例進行介紹。

首先,在build.gradle文件中添加依賴:

dependencies {
    implementation 'com.google.zxing:core:3.4.1'
    implementation 'com.journeyapps:zxing-android-embedded:3.6.0'
}

然後在你的Activity中添加如下代碼即可啟動掃描界面:

public class MainActivity extends AppCompatActivity implements ZXingScannerView.ResultHandler {

    private ZXingScannerView mScannerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mScannerView = new ZXingScannerView(this);   
        setContentView(mScannerView);// Set the scanner view as the content view
    }

    @Override
    public void onResume() {
        super.onResume();
        mScannerView.setResultHandler(this); // Register ourselves as a handler for scan results.
        mScannerView.startCamera();          // Start camera on resume
    }

    @Override
    public void onPause() {
        super.onPause();
        mScannerView.stopCamera();           // Stop camera on pause
    }

    @Override
    public void handleResult(Result rawResult) {
        // Do something with the result here
        Toast.makeText(this, "Contents = " + rawResult.getText() +
                ", Format = " + rawResult.getBarcodeFormat().toString(), Toast.LENGTH_SHORT).show();

        // If you would like to resume scanning, call this method below:
        mScannerView.resumeCameraPreview(this);
    }
}

以上代碼將啟動一個相機預覽界面,用戶可以在該界面掃描條形碼/二維碼,並將掃描結果返回給handleResult()方法。通過rawResult參數的getText()方法獲取掃描結果的文本內容,通過getBarcodeFormat()方法獲取掃描結果的類型。

三、高級功能

1. 二維碼識別時的角度矯正

在識別二維碼時,由於拍照角度的原因,有時會導致二維碼呈傾斜狀態,從而影響識別效果。Googlezxing提供了角度矯正的功能,可以自動矯正二維碼的角度,使其保持正常狀態。

以下是示例代碼:

// 讀取圖片文件
Bitmap bitmap = BitmapFactory.decodeFile("/path/to/your/image.png");

// 將圖片轉換為二進制位圖
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int[] pixels = new int[width * height];
bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);

// 將二進制位圖解碼為二維碼
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));
QRCodeReader reader = new QRCodeReader();
Result result = reader.decode(binaryBitmap, new Hashtable() {{
    put(DecodeHintType.TRY_HARDER, Boolean.TRUE); // 設置優化參數,加強識別效果
    put(DecodeHintType.PURE_BARCODE, Boolean.TRUE); // 設置優化參數,只識別純文本
    put(DecodeHintType.ASSUME_GS1, Boolean.TRUE); // 設置優化參數,想象是GS1標準格式
}});

2. 條形碼識別時的多邊形掃描

在識別條形碼時,由於光線、污垢、扭曲等原因,有時會導致識別失敗。Googlezxing提供了多邊形掃描的功能,可以通過掃描多個角度,找到最優的掃描結果。

以下是示例代碼:

// 讀取圖片文件
Bitmap bitmap = BitmapFactory.decodeFile("/path/to/your/image.png");

// 將圖片轉換為二進制位圖
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int[] pixels = new int[width * height];
bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);

// 將二進制位圖解碼為條形碼
HybridBinarizer binarizer = new HybridBinarizer(source);
MultipleBarcodeReader reader = new GenericMultipleBarcodeReader(new MultiFormatReader());
Result[] results = reader.decodeMultiple(new BinaryBitmap(binarizer));

// 選取最優結果
Result finalResult = null;
float maxScore = Float.MIN_VALUE;
for (Result result : results) {
    float score = result.getBarcodeMetadata().getConfidence();
    if (score > maxScore) {
        finalResult = result;
        maxScore = score;
    }
}

3. 生成QR代碼

在一些應用場景下,需要生成對應的QR代碼。Googlezxing提供了QR代碼生成的功能,可以快速生成QR代碼圖片。

以下是示例代碼:

// 生成QR代碼
String contents = "Hello, world!";
int width = 300;
int height = 300;
Map hints = new HashMap();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
BitMatrix matrix = new MultiFormatWriter().encode(contents, BarcodeFormat.QR_CODE, width, height, hints);

// 將QR代碼轉換為圖片
int[] pixels = new int[width * height];
for (int y = 0; y < height; y++) {
    int offset = y * width;
    for (int x = 0; x < width; x++) {
        pixels[offset + x] = matrix.get(x, y) ? BLACK : WHITE;
    }
}
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels, 0, width, 0, 0, width, height);

// 顯示QR代碼圖片
ImageView imageView = findViewById(R.id.image_view);
imageView.setImageBitmap(bitmap);

四、總結

Googlezxing是一個功能強大、易於使用的條形碼/二維碼解析庫,支持多種平台的使用,並提供了豐富的解碼能力和高級功能。通過閱讀本文,相信您已經對Googlezxing有了更深入的了解,並可以更加靈活地使用它。

原創文章,作者:SSDMN,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/360708.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
SSDMN的頭像SSDMN
上一篇 2025-02-24 00:33
下一篇 2025-02-24 00:33

相關推薦

  • Zlios——一個多功能的開發框架

    你是否在開發過程中常常遇到同樣的問題,需要不斷去尋找解決方案?你是否想要一個多功能、易於使用的開發框架來解決這些問題?那麼,Zlios就是你需要的框架。 一、簡介 Zlios是一個…

    編程 2025-04-29
  • Python中的delattr:一個多功能的屬性刪除方法

    在Python編程中,delattr()是一個十分強大常用的函數,可以方便的刪除一個對象的屬性,並且使用起來非常靈活。接下來將從多個方面詳細闡述Python中的delattr()方…

    編程 2025-04-27
  • Vue二維碼生成

    一、二維碼生成概述 在前端開發中,經常需要生成二維碼,例如付款碼、頁面分享等。對於生成二維碼的實現,有多種方式。其中,基於第三方庫的實現是比較常見的方式。Vue作為一個流行的前端框…

    編程 2025-04-25
  • 從多個方面講解URL生成二維碼

    一、二維碼技術簡介 二維碼是一種用於儲存信息的矩陣條形碼,現已廣泛應用於各種應用場景,如門票、支付、證件等。二維碼由黑、白模塊組成,其中黑塊表示二進制數字1,白塊表示0,通過圖像處…

    編程 2025-04-25
  • kfloatwin.dll——多功能窗口驅動程序

    一、介紹 kfloatwin.dll是一個輕量級多功能窗口驅動程序,具有窗口置頂、窗口拖動、窗口透明等功能。本文將從功能、使用、實現等多個方面進行詳細闡述。 二、功能 1、窗口置頂…

    編程 2025-04-24
  • log4cpp:多功能的C++日誌庫

    一、簡介 log4cpp是一個支持多線程的C++日誌庫,能夠讓程序員在應用程序中方便地記錄日誌輸出,分級管理日誌信息,並靈活地控制日誌記錄方式。 log4cpp的設計目標是提供一種…

    編程 2025-04-24
  • 使用Vue生成二維碼並保存圖片

    一、生成二維碼 生成二維碼是基於第三方庫qrcode-generator的,我們可以通過npm安裝該庫: npm install qrcode-generator –save 我…

    編程 2025-04-23
  • Maxcomputer: 多功能編程開發工具

    Maxcomputer是一款全能的編程開發工具,它集成了多種編程語言和開發工具,包括但不限於Java、Python、C/C++、JavaScript、Ruby、PHP等。使用Max…

    編程 2025-04-23
  • UniApp二維碼生成詳解

    一、UniApp二維碼生成海報 海報是一種非常流行的宣傳方式。在UniApp中,我們可以利用uni-app-qrcode組件生成二維碼再利用canvas生成海報。具體步驟如下: 1…

    編程 2025-04-23
  • Rehl: 多功能的Linux編譯器

    一、簡介 Rehl是一款專門為Linux設計的多功能編譯器,其名稱源於Red Hat Enterprise Linux。Rehl擁有豐富的功能和工具,以滿足Linux開發人員的需求…

    編程 2025-04-22

發表回復

登錄後才能評論