ZXingLite

Project Url: jenly1314/ZXingLite
Introduction: ZXing 的精简版,优化扫码和生成二维码/条形码功能,让集成更简单。
More: Author   ReportBugs   
Tags:

Image

Download MavenCentral JCenter JitPack CI CircleCI License

ZXingLite for Android 是 ZXing 的精简极速版,基于 ZXing 库优化扫码和生成二维码/条形码功能,扫码界面完全支持自定义;使用 ZXingLite 可快速实现扫码识别相关功能。

简单如斯,你不试试?

Gif 展示

Image

你也可以直接下载 演示 App 体验效果

引入

Gradle:

  1. 在 Project 的 build.gradlesetting.gradle 中添加远程仓库

     repositories {
         //...
         mavenCentral()
     }
    
  2. 在 Module 的 build.gradle 里面添加引入依赖项

     // AndroidX 版本
     implementation 'com.github.jenly1314:zxing-lite:3.1.0'
    

温馨提示

关于 ZXingLite 版本与编译的 SDK 版本要求

使用 v3.1.x 以上版本时,要求 compileSdkVersion >= 34

使用 v3.0.x 以上版本时,要求 compileSdkVersion >= 33

如果 compileSdkVersion < 33 请使用 v2.x 版本

使用

版本变化说明

3.x 版本的变化

2.x3.x 主要变化如下:

  • 2.x 版本中的 CameraScan 相关核心类被移除了;

    从 3.0.0 版本开始改为依赖 CameraScan;(CameraScan是一个独立的库,单独进行维护)

  • 2.x 版本中的 ViewfinderView 被移除了;

    从 3.0.0 版本开始改为依赖 ViewfinderView;(ViewfinderView是一个独立的库,单独进行维护)

  • 2.x 版本中的 CaptureActivityCaptureFragment 相关基类被移除了;

    从 3.0.0 版本开始改为 BarcodeCameraActivityBarcodeCameraFragment

除了以上几点主要差异变化,3.x 版本的整体使用方式和 2.x 基本类似;3.x 版本在 2.x 版本的基础上再次进行重构,将 CameraScan 相关的公共基础类从 ZXingLite 中移除后,维护起来更方便了。

如果你是从 2.x 版本升级至 3.x 版本,那么你需要知道上面所说的主要差异;特别是独立出去单独维护的库,其包名都有所变化,这一点需要特别注意;请谨慎升级。

如果你使用的是 2.x 版本的话请直接查看 v2.x 分支版本

3.x 版本的使用

3.x 的实现主要是以 CameraScan作为基础库去实现具体的分析检测功能,所以你可以先去看下 CameraScan的使用说明;在了解了 CameraScan的基本使用方式后,然后再结合当前的使用说明就可以轻松的集成并使用 ZXingLite了。

主要类说明

关于 Analyzer 的实现类

内部提供了 Analyzer 对应的实现,都是为快速实现扫码识别而提供的分析器。

内部提供的分析器有多个;一般情况下,你只需要知道最终实现的 MultiFormatAnalyzerQRCodeAnalyzer 即可:

MultiFormatAnalyzerQRCodeAnalyzer 的主要区别,从名字大概就能看的出来;一个是可识别多种格式,一个是只识别二维码(具体需要支持识别哪些格式的条码,其实还要看提供的DecodeConfig是怎么配置的)。

本可以不需要 QRCodeAnalyzer,之所以提供一个 QRCodeAnalyzer 是因为有很多需求是只需要识别二维码就行;如果你有连续扫码的需求或不知道怎么选时,推荐直接选择 MultiFormatAnalyzer

关于 DecodeConfig

DecodeConfig:解码配置;主要用于在扫码识别时,提供一些配置,便于扩展。通过配置可决定内置分析器的能力,从而间接的控制并简化扫码识别的流程。一般在使用 Analyzer 的实现类时,你可能会用到。

关于 DecodeFormatManager

DecodeConfig:解码格式管理器;主要将多种条码格式进行划分与归类,便于提供快捷配置。

关于 CodeUtils

工具类 CodeUtils 中主要提供;解析条形码/二维码、生成条形码/二维码相关的能力。

CodeUtils 的使用示例


    // 生成二维码
    CodeUtils.createQRCode(content,600,logo);
    // 生成条形码
    CodeUtils.createBarCode(content, BarcodeFormat.CODE_128,800,200);
    // 解析条形码/二维码
    CodeUtils.parseCode(bitmap);
    // 解析二维码
    CodeUtils.parseQRCode(bitmap);

关于 BarcodeCameraScanActivity

通过继承 BarcodeCameraScanActivity 实现扫二维码完整示例

public class QRCodeScanActivity extends BarcodeCameraScanActivity {

    @Override
    public void initCameraScan(@NonNull CameraScan<Result> cameraScan) {
        super.initCameraScan(cameraScan);
        // 根据需要设置 CameraScan 相关配置
        cameraScan.setPlayBeep(true);
    }

    @Nullable
    @Override
    public Analyzer<Result> createAnalyzer() {
        // 初始化解码配置
        DecodeConfig decodeConfig = new DecodeConfig();
        decodeConfig.setHints(DecodeFormatManager.QR_CODE_HINTS)//如果只有识别二维码的需求,这样设置效率会更高,不设置默认为 DecodeFormatManager.DEFAULT_HINTS
                .setFullAreaScan(false)//设置是否全区域识别,默认 false
                .setAreaRectRatio(0.8f)//设置识别区域比例,默认 0.8,设置的比例最终会在预览区域裁剪基于此比例的一个矩形进行扫码识别
                .setAreaRectVerticalOffset(0)//设置识别区域垂直方向偏移量,默认为 0,为 0 表示居中,可以为负数
                .setAreaRectHorizontalOffset(0);//设置识别区域水平方向偏移量,默认为 0,为 0 表示居中,可以为负数
        // BarcodeCameraScanActivity 默认使用的 MultiFormatAnalyzer,这里可以改为使用 QRCodeAnalyzer
        return new QRCodeAnalyzer(decodeConfig);
    }

    /**
     * 布局 ID;通过覆写此方法可以自定义布局
     *
     * @return 布局 ID
     */
    @Override
    public int getLayoutId() {
        return R.layout.activity_qrcode_scan;
    }

    @Override
    public void onScanResultCallback(@NonNull AnalyzeResult<Result> result) {
        // 停止分析
        getCameraScan().setAnalyzeImage(false);
        // 返回结果
        Intent intent = new Intent();
        intent.putExtra(CameraScan.SCAN_RESULT, result.getResult().getText());
        setResult(Activity.RESULT_OK, intent);
        finish();
    }
}

BarcodeCameraScanFragment 的使用方式与之类似。

更多使用详情,请查看app中的源码使用示例或直接查看API 帮助文档

其他

JDK 版本与 API 脱糖

当使用 ZXingLite 为 v2.3.x 以上版本时,(即:更新 zxing 至 v3.5.1 后);如果要兼容 Android 7.0 (N) 以下版本(即:minSdk<24),可通过脱糖获得 Java 8 及更高版本 API。

compileOptions {
    // Flag to enable support for the new language APIs
    coreLibraryDesugaringEnabled true
    // Sets Java compatibility to Java 11
    targetCompatibility JavaVersion.VERSION_11
    sourceCompatibility JavaVersion.VERSION_11
}
dependencies {
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.2.3'
}

相关推荐

MLKit 一个强大易用的工具包。通过 ML Kit 您可以很轻松的实现文字识别、条码识别、图像标记、人脸检测、对象检测等功能。

WeChatQRCode 基于 OpenCV 开源的微信二维码引擎移植的扫码识别库。

CameraScan 一个简化扫描识别流程的通用基础库。

ViewfinderView ViewfinderView 一个取景视图:主要用于渲染扫描相关的动画效果。

版本记录

v3.1.0:2023-12-31

  • 更新 CameraScan 至 v1.1.0
  • 更新 zxing 至 v3.5.2
  • 更新 compileSdkVersion 至 34
  • 更新 Gradle 至 v8.0

v3.0.1:2023-9-13

  • 更新 CameraScan 至 v1.0.1
  • 更新 ViewfinderView 至 v1.1.0

v3.0.0:2023-8-23

  • 将通用基础类拆分移除并进行重构,后续维护更便捷
  • 移除 CameraScan 相关核心类,改为依赖 CameraScan
  • 移除扫码取景视图 ViewfinderView,改为依赖 ViewfinderView
  • 移除 CaptureActivityCaptureFragment,新增 BarcodeCameraScanActivityBarcodeCameraScanFragment 来替代
  • 优化扫描分析过程的性能体验(优化帧数据分析过程)

v2.4.0:2023-4-15

  • 优化 CameraScan 的缺省配置(CameraConfig 相关配置)
  • 优化 ViewfinderView 自定义属性(新增 laserDrawableRatio)
  • 优化 ImageAnalyzer 中 YUV 数据的处理
  • 更新 CameraX 至 v1.2.2

v2.3.1:2023-3-4

  • 更新 CameraX 至 v1.2.1
  • 更新 Gradle 至 v7.5
  • 优化细节

v2.3.0:2022-12-11

  • 更新 CameraX 至 v1.2.0
  • 更新 zxing 至 v3.5.1
  • 更新 compileSdkVersion 至 33

查看更多版本记录

赞赏

如果您喜欢 ZXingLite,或感觉 ZXingLite 帮助到了您,可以点右上角“Star”支持一下,您的支持就是我的动力,谢谢 :smiley:

您也可以扫描下面的二维码,请作者喝杯咖啡 :coffee:

关于我

我的博客 GitHub Gitee CSDN 博客园
Jenly's Blog jenly1314 jenly1314 jenly121 jenly

联系我

微信公众号 Gmail 邮箱 QQ 邮箱 QQ 群 QQ 群
Jenly666 jenly1314 jenly1314 20867961 64020761
Apps
About Me
GitHub: Trinea
Facebook: Dev Tools