Giter Club home page Giter Club logo

jenly1314 / zxinglite Goto Github PK

View Code? Open in Web Editor NEW
2.9K 27.0 468.0 128.95 MB

🔥 ZXing的精简极速版,优化扫码和生成二维码/条形码,内置闪光灯等功能。扫描风格支持:微信的线条样式,支付宝的网格样式。几句代码轻松拥有扫码功能 ,ZXingLite让集成更简单。(扫码识别速度快如微信)

License: Apache License 2.0

Java 93.60% Kotlin 6.40%
zxing zxing-library qrcode barcode scanner scancode code-generator zbar qr-code qrcode-scanner

zxinglite's Introduction

ZXingLite

Image

Download MavenCentral JCenter JitPack CI CircleCI API 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”支持一下,您的支持就是我的动力,谢谢 😃

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

关于我

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

联系我

微信公众号 Gmail邮箱 QQ邮箱 QQ群 QQ群
Jenly666 jenly1314 jenly1314 20867961 64020761

zxinglite's People

Contributors

asdzheng avatar jenly1314 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

zxinglite's Issues

识别条形码问题

竖着放的条形码不能识别,必须要横着放才能识别,zxing自己的demo横竖都可以识别,这是什么原因呢

闪退

java.lang.ArrayIndexOutOfBoundsException: length=1382400; index=1383479 at com.king.zxing.DecodeHandler.decode(DecodeHandler.java:80) at com.king.zxing.DecodeHandler.handleMessage(DecodeHandler.java:57) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:164) at com.king.zxing.DecodeThread.run(DecodeThread.java:111)

ViewfinderView位置

你好,ViewfinderView位置是全屏固定的,可以让它自定义位置吗?

可以设置非全屏扫描吗

我看了一下源码,CameraConfigureationManager是按照screen display生成preiveiw的。有什么办法,可以外部配置吗?

发现个问题

即使二维码没有在扫描框内,只要完整出现在手机画面里也会被识别。然后在有些手机(分辨率2560*1440)里,扫描框出现变形。
4f67ee8d3a7a4cb9a4ebeddeca69b2db

固定焦距

你好,对焦还是不够快,我想给它固定一个焦距,条码和镜头在这个焦距内去扫描,减少对焦时间,不知道这样的构思和实现怎么样去调整。

条形码手机识别速度慢

您好,条形码手机识别速度慢,用过华为的8X,OPPO R11,识别条形码太慢了,二维码很快,但是三星的S10速度超级快。硬件这块没办法改变了,有没有什么调优的构思呢?

CaptureActivity点击返回按钮黑屏

有三个问题:

第一:在示例代码中checkCameraPermissions方法的返回值必须为void并且不能有参数,否则会有异常

Cannot execute method [method name] because it is non-void method and/or has input parameters

第二:首次安装应用,给予相机权限,启动EasyCaptureActivity后,点击返回按钮,EasyCaptureActivity闪了一下,但是立马又显示出来了,再次点击返回按钮,才完全关闭EasyCaptureActivity

第三:我自己继承的CaptureActivity首次启动后点击返回按钮,EasyCaptureActivity虽然扫描页面没了,但是留了个黑屏,再次点击才关闭EasyCaptureActivity;

之后再打开CaptureActivity,点击返回,一切正常;

扫码速度的问题

加签名release的apk扫码识别速度很快(DecodeHandler: Found barcode 时间平均为150~250ms),但是debug后的app扫码识别速度就很慢(DecodeHandler: Found barcode 时间平均为2000ms),请问是什么原因呢

Oppo R9s打不开相机,跳转后二维码扫描框显示正在扫描,背景一片黑,控制台报错如下

java.lang.RuntimeException: getParameters failed (empty parameters)
    at android.hardware.Camera.native_getParameters(Native Method)
    at android.hardware.Camera.getParameters(Camera.java:2027)
    at com.king.zxing.camera.AutoFocusManager.<init>(AutoFocusManager.java:54)
    at com.king.zxing.camera.CameraManager.startPreview(CameraManager.java:156)
    at com.king.zxing.CaptureActivityHandler.<init>(CaptureActivityHandler.java:75)
    at com.king.zxing.CaptureActivity.initCamera(CaptureActivity.java:786)
    at com.king.zxing.CaptureActivity.surfaceCreated(CaptureActivity.java:427)
    at android.view.SurfaceView.updateWindow(SurfaceView.java:618)
    at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:161)
    at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2205)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1254)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6343)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:874)
    at android.view.Choreographer.doCallbacks(Choreographer.java:686)
    at android.view.Choreographer.doFrame(Choreographer.java:621)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:860)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6126)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

关于Camera的问题

现在市面上的机器大部分都是5.0以上的了,5.0以上的Camera这个已经被标记过时了,能不能更换成Camera2.

标题夸张了

固定资产的二维码,半天扫不出,扫了N次终于出来了,结果扫出来信息还是错误的。。。

1.1.0版本中com.king.zxing.CaptureActivity未注册到清单文件

在1.1.0版本中报错,1.0.6版本中不会报这个错误
2019-05-19 16:43:00.818 28466-28466/com.test.picture E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.test.picture, PID: 28466
android.content.ActivityNotFoundException: Unable to find explicit activity class {com.test.picture/com.king.zxing.CaptureActivity}; have you declared this activity in your AndroidManifest.xml?
需要自己注册:

Open, close Flash exception

Here cause when I clicked flash image:

Caused by: java.lang.RuntimeException: setParameters failed
at android.hardware.Camera.native_setParameters(Native Method)
at android.hardware.Camera.setParameters(Camera.java:2102)
at com.king.zxing.app.CustomActivity.openFlash(CustomActivity.java:107)
at com.king.zxing.app.CustomActivity.clickFlash(CustomActivity.java:130)
at com.king.zxing.app.CustomActivity.onClick(CustomActivity.java:142)

How can I resolve the exception? Thanks so much.

扫描提示音bug

synchronized void updatePrefs() {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity);
shouldBeep(prefs, activity);
// vibrate = prefs.getBoolean(Preferences.KEY_VIBRATE, false);
if (playBeep && mediaPlayer == null) {
// The volume on STREAM_SYSTEM is not adjustable, and users found it too loud,
// so we now play on the music stream.
activity.setVolumeControlStream(AudioManager.STREAM_MUSIC);
mediaPlayer = buildMediaPlayer(activity);
}
}
初始化时,playBeep 一直是false;mediaPlayer 一直是null;根本不会有声音

开启连续扫描会有一个逻辑上的bug

/**
 * 接收扫码结果,想支持连扫时,可将{@link #continuousScan(boolean)}设置为{@code true}
 * 如果{@link #isContinuousScan}支持连扫,则默认重启扫码和解码器;当连扫逻辑太复杂时,
 * 请将{@link #autoRestartPreviewAndDecode(boolean)}设置为{@code false},并手动调用{@link #restartPreviewAndDecode()}
 * @param result 扫码结果
 */
public void onResult(Result result){
    String text = result.getText();
    if(isContinuousScan){
        if(isAutoRestartPreviewAndDecode){
            if(onCaptureCallback!=null){
                onCaptureCallback.onResultCallback(text);
            }
            restartPreviewAndDecode();
        }
    }else{
        //如果设置了回调,并且onCallback返回为true,则表示拦截
        if(onCaptureCallback!=null && onCaptureCallback.onResultCallback(text)){
            return;
        }
        Intent intent = new Intent();
        intent.putExtra(Intents.Scan.RESULT,text);
        activity.setResult(Activity.RESULT_OK,intent);
        activity.finish();
    }
}

这是您原来的处理,但是如果我开启连续扫描,并且禁止自动重启下次扫描,您就不会回调结果了。应该修改为
public void onResult(Result result){
String text = result.getText();
if(isContinuousScan){
if(onCaptureCallback!=null){
onCaptureCallback.onResultCallback(text);
}
if(isAutoRestartPreviewAndDecode){
//if(onCaptureCallback!=null){
// onCaptureCallback.onResultCallback(text);
// }
restartPreviewAndDecode();
}
}else{
...
}
}

识别本地图片问题

我有一张图片,直接导入本地图,识别不出来,但是打开图片,用照相机预览扫描又可以扫出来,不知道是什么原因

混淆问题

没有说需要混淆规则
但混淆报错了

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.