一、简介
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; Maphints = 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有了更深入的了解,并可以更加灵活地使用它。