您的位置:

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有了更深入的了解,并可以更加灵活地使用它。