Android 二維碼相關(二)

夏沫琅琊發表於2024-03-08

Android 二維碼相關(二)

本篇文章繼續講述下如何使用zxing解析二維碼圖片,獲取內容.

1: 建立RGBLuminanceSource物件.

首先獲取二維碼圖片的bitmap物件.

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.test);

根據getPixels()獲取點陣圖指定區域的畫素顏色值.

int width = srcBitmap.getWidth();
int height = srcBitmap.getHeight();
int[] pixels = new int[width * height];
bitmap.getPixels(pixels, 0, width, 0, 0, width, height);

//使用pixels陣列建立RGBLuminanceSource物件

RGBLuminanceSource rgbLuminanceSource = new RGBLuminanceSource(width, height, pixels);

2: 獲取BinaryBitmap物件

BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(rgbLuminanceSource));

BinaryBitmap類的主要作用是為解碼器提供一個可讀取的二進位制影像。

解碼器可以使用BinaryBitmap來解碼包含在影像中的條形碼或二維碼。

3: 建立解碼器

MultiFormatReader類是ZXing庫中的核心類之一,它可以識別和解碼多種不同型別的條碼和二維碼.

MultiFormatReader multiFormatReader = new MultiFormatReader();

4: 解碼

try {
    Result decode = multiFormatReader.decode(binaryBitmap);
    String text = decode.getText();
    return text;
} catch (Throwable e) {
    Log.e(TAG, "decodeBitmap: ", e);
}

完整的程式碼如下:

/**
     * @param srcBitmap 二維碼圖片
     * @return 文案
     */
    public static String decodeBitmap(Bitmap srcBitmap) {
        if (srcBitmap == null) return "";

        int width = srcBitmap.getWidth();
        int height = srcBitmap.getHeight();
        int[] pixels = new int[width * height];
        srcBitmap.getPixels(pixels, 0, width, 0, 0, width, height);
        //使用Bitmap物件建立RGBLuminanceSource物件,該物件將被傳遞給zxing庫進行識別
        RGBLuminanceSource rgbLuminanceSource = new RGBLuminanceSource(width, height, pixels);

		//BinaryBitmap類的主要作用是為解碼器提供一個可讀取的二進位制影像。解碼器可以使用BinaryBitmap來解碼包含在影像中的條形碼或二維碼。
        BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(rgbLuminanceSource));

        MultiFormatReader multiFormatReader = new MultiFormatReader();
        try {
            Result decode = multiFormatReader.decode(binaryBitmap);
            String text = decode.getText();
            return text;
        } catch (Throwable e) {
            Log.e(TAG, "decodeBitmap: ", e);
        }
        return "";
    }

本文由部落格一文多發平臺 OpenWrite 釋出!

相關文章