zbar 扫描快,zxing 可以生成和识别本地,So,我就把他们结合在了一起,这样 Android 二维码(条形码)功能就更便捷了

Posted Wei_Leng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zbar 扫描快,zxing 可以生成和识别本地,So,我就把他们结合在了一起,这样 Android 二维码(条形码)功能就更便捷了相关的知识,希望对你有一定的参考价值。

zBarLibary

项目地址:bertsir/zBarLibary 

简介: 🔥 zbar 扫描快,zxing 可以生成和识别本地,So,我就把他们结合在了一起,这样 Android 二维码(条形码)功能就更便捷了 更多:作者   提 Bug    标签:

zbar 扫描快,zxing 可以生成和识别本地,So,我就把他们结合在了一起,这样二维码识别就更便捷了(包含主要功能,二维码识别生成,条形码识别生成)

  

Plan

1.优化代码结构
2.优化双识别引擎
3.更换图片裁切库
4.优化自动拉近功能

更新日志

2019-12-26 (1.4.2)

1.降低 zXing 版本到 3.3.0

2019-11-05 (1.4.1)

1.新增自定义图标的 api(setBackImageRes/setLightImageRes/setAblumImageRes)

2019-10-16 (1.4.0)

1.修复指定屏幕方向无效的 BUG

2019-10-15 (1.3.9)

1.新增识别成功震动提醒

2019-09-27 (1.3.8)

1.新增自动灯光(开启扫描后,若光线不足,自动打开闪光灯)

2019-09-18 (1.3.7)

1.修复 BUG #81
2.优化彩色二维码的本地识别#84
3.升级 zxing 为 3.4.0

2019-09-16 (1.3.6)

1.新增扫描动画样式(共 4 种了,市面上常见的应该都有)
魔改自:Android-自定义 View 实现二维码网格扫描+纵向雷达的扫描效果

2019-08-30 (1.3.5)

1.新增了连续扫描时间间隔的设置(setLooperWaitTime)
2.优化了屏幕旋转重建 Activity 的问题

2019-08-19 (1.3.4)

1.修改识别结果返回类型,由 String 变为 ScanResult(包含码的内容和码的类型,后期可能还会拓展)

2019-07-10 (1.3.3)

1.新增双识别引擎(zbar+zxing 同时识别,建议只用在需求二维码扫描不出来的时候做尝试使用,且暂只支持对二维码有效,在开启这个功能的时候只识别框中内容将失效)
2.新增对打开相册文案的自定义
3.新增持续扫描

2019-06-27 (1.3.2)

1.支持双指缩放摄像头了(现在支持三种摄像头的缩放方式了)

2019-06-18 (1.3.1)

1.修复 BUG

2019-06-12 (1.3.0)

1.修复了开启自动拉近时部分机型崩溃的问题

2019-04-08 (1.2.9)

1.新增屏幕方向指定 API(setScreenOrientation 默认为竖屏)
注:当屏幕为横向时自动拉近距离将不可用

2019-04-08 (1.2.8)

1.强制指定扫描页面为竖屏模式(废弃)

2019-03-26 (1.2.6)

1.从相册选择识别支持了条形码

2019-03-14 (1.2.5)

1.优化了低配置机型开启自动拉近的 UI 卡顿问题

2019-03-13 (1.2.4)

1.解决多应用引用本库引起的安装失败问题

2019-03-11(1.2.3)

1.修复了部分机型在设置 SeekBar 颜色时可能出现的类强转异常

2019-03-04

1.新增自动焦距调整(实验性功能)
2.解决了可能会出现的 FileProvider 的冲突

2019-03-01

1.新增手动焦距调整

2019-01-28

1.修复了 Nexus 5X 扫码摄像头倒置的问题(感谢 Selince)

2019-01-15

1.新增了从相册选择图片识别时候的图片裁剪
2.修复了相机对焦时的部分问题

2018-11-15

1.修复无闪光灯机器打开手电筒闪退的 BUG(感谢 DwayneZhang)

2018-10-23

1.提高从相册选择二维码识别的成功率

2018-09-10

1.修复从相册选择路径的 bug
2.修复从相册选择对存储权限的申请
3.提高生成二维码的容错率

2018-08-13

1.加入内部权限处理

2018-03-13

1.修复生成条形码时下方文字的 BUG(感谢 simplepeng)
2.优化识别本地二维码(由 zxing 识别转为 zbar 识别,大幅提升复杂图片中二维码的识别)
3.新增识别本地条形码

2018-02-26

1.新增生成带 logo 的二维码
2.调整生成二维码的边框值
3.提升生成二维码的容错率

2018-02-09

1.修复了从相册选择二维码无结果返回的 BUG

2018-02-08

1.修复中文"你好"扫描乱码的情况
2.修复生成二维码不能使用中文的问题
3.新增生成二维码指定大小的方法

2018-02-07

1.修复打开手电筒扫码成功无结果也不返回的问题

2018-02-06

1.修复不能隐藏扫描框下方描述的 BUG
2.新增只识别扫描框中的内容
3.新增自定义扫码类型
4.新增自定义扫描框类型
5.新增自定义提示音

2018-02-02

1.修复二维码扫描的误识别,提高二维码扫描速度

2017-12-21:

1.修复了左上角返回按钮无效的问题

2017-10-13:

1.修复了识别二维码的一个 BUG(感谢 穿越硝烟的迷彩)

2017-09-22:

1.重构了整个包,修改了包名
2.添加了全平台的 so 文件,其实看官们保留 x86 和 v7a 就够了
3.新增打开闪光灯
4.新增了从相册识别
5.修改了启动方法和结果回调
6.新增了一大波看官们可以配置的功能

引入

方式一(需要修改布局的):

GitHub 下载库,使用 File -> new -> Import Module 方式

方式二(不需要修改布局):

最新版本(推荐):

 implementation 'cn.bertsir.zbarLibary:zbarlibary:latest.release'
指定版本:
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
注意:如果不需要尝鲜后续功能,并且保持现有稳定,建议使用指定版本号 #### 关于包的大小问题 为了确保全平台的兼容,默认库中携带了 arm64-v8a,armeabi,armeabi-v7a,mips,mips64,x86,x86_64,的 so 文件,可能会导致安装包体积大,和其他第三方 SDK 冲突的问题,可以使用以下代码解决大小和冲突
android 
    ......
    defaultConfig 
        ......
        ......
        ......
        ndk 
            abiFilters "armeabi-v7a"  // 指定要 ndk 需要兼容的架构(这样其他依赖包里 mips,x86,armeabi,arm-v8 之类的 so 会被过滤掉)
        
    

使用方法

1.识别二维码(条形码)

        QrConfig qrConfig = new QrConfig.Builder()
                .setDesText("(识别二维码)")//扫描框下文字
                .setShowDes(false)//是否显示扫描框下面文字
                .setShowLight(true)//显示手电筒按钮
                .setShowTitle(true)//显示 Title
                .setShowAlbum(true)//显示从相册选择按钮
                .setCornerColor(Color.WHITE)//设置扫描框颜色
                .setLineColor(Color.WHITE)//设置扫描线颜色
                .setLineSpeed(QrConfig.LINE_MEDIUM)//设置扫描线速度
                .setScanType(QrConfig.TYPE_QRCODE)//设置扫码类型(二维码,条形码,全部,自定义,默认为二维码)
                .setScanViewType(QrConfig.SCANVIEW_TYPE_QRCODE)//设置扫描框类型(二维码还是条形码,默认为二维码)
                .setCustombarcodeformat(QrConfig.BARCODE_I25)//此项只有在扫码类型为 TYPE_CUSTOM 时才有效
                .setPlaySound(true)//是否扫描成功后 bi~的声音
                .setNeedCrop(true)//从相册选择二维码之后再次截取二维码
                .setDingPath(R.raw.test)//设置提示音(不设置为默认的 Ding~)
                .setIsOnlyCenter(true)//是否只识别框中内容(默认为全屏识别)
                .setTitleText("扫描二维码")//设置 Tilte 文字
                .setTitleBackgroudColor(Color.BLUE)//设置状态栏颜色
                .setTitleTextColor(Color.BLACK)//设置 Title 文字颜色
                .setShowZoom(false)//是否手动调整焦距
                .setAutoZoom(false)//是否自动调整焦距
                .setFingerZoom(false)//是否开始双指缩放
                .setScreenOrientation(QrConfig.SCREEN_PORTRAIT)//设置屏幕方向
                .setDoubleEngine(false)//是否开启双引擎识别(仅对识别二维码有效,并且开启后只识别框内功能将失效)
                .setOpenAlbumText("选择要识别的图片")//打开相册的文字
                .setLooperScan(false)//是否连续扫描二维码
                .setLooperWaitTime(5*1000)//连续扫描间隔时间
                .setScanLineStyle(ScanLineView.style_radar)//扫描动画样式
                .setAutoLight(false)//自动灯光
                .setShowVibrator(false)//是否震动提醒
                .create();
   QrManager.getInstance().init(qrConfig).startScan(MainActivity.this, new QrManager.OnScanResultCallback() 
            @Override
            public void onScanSuccess(ScanResult result) 
                Log.e(TAG, "onScanSuccess: "+result );
                Toast.makeText(getApplicationContext(), "内容:"+result.getContent()
                                +"  类型:"+result.getType(), Toast.LENGTH_SHORT).show();
            
        );
OK,就这么简单! ##### 如果扫描界面不符合你的需求,来吧 QRActivity 的布局文件你随便改,保证改起来比别的库简单! ## 2.生成码 ### 2.1 生成二维码
Bitmap qrCode = QRUtils.getInstance().createQRCode("www.qq.com");

2.1.1 生成二维码并添加 Logo

Bitmap qrCode = QRUtils.getInstance().createQRCodeAddLogo(et_qr_content.getText().toString(),BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher));
### 2.2 生成条形码
QRUtils.TextViewConfig textViewConfig = new QRUtils.TextViewConfig();
textViewConfig.setSize(10);
 Bitmap barCodeWithText = QRUtils.getInstance().createBarCodeWithText(getApplicationContext(), content, 300, 100, textViewConfig);

3.识别本地

3.1 识别本地二维码

//可以传图片路径,Bitmap,ImageView 是不是很人性化
String s = QRUtils.getInstance().decodeQRcode(iv_qr);

3.2 识别本地条形码

//可以传图片路径,Bitmap,ImageView 是不是很人性化
String s = QRUtils.getInstance().decodeBarcode(iv_qr);

4.参数描述

nameformatdescription
setDesTextString设置扫描框下方描述文字
setShowDesBoolean设置是否显示扫描框下方描述文字
setShowLightBoolean是否开启手电筒功能
setShowAlbumBoolean是否开启从相册选择功能
setShowTitleBoolean是否显示 Title
setTitleTextString设置 Title 文字
setTitleBackgroudColorint设置 Title 背景色
setTitleTextColorint设置 Title 文字颜色
setCornerColorint设置扫描框颜色
setLineColorint设置扫描线颜色
setLineSpeedint设置扫描线速度
QrConfig.LINE_FAST(快速)
QrConfig.LINE_MEDIUM(中速)
QrConfig.LINE_SLOW(慢速) 
也可以自定义时间(单位毫秒)
setScanTypeint设置扫描类型
QrConfig.TYPE_QRCODE(二维码)
QrConfig.TYPE_BARCODE(条形码)
QrConfig.TYPE_ALL(全部类型)
QrConfig.TYPE_CUSTOM(指定类型)
setScanViewTypeint设置扫描框类型
QrConfig.SCANVIEW_TYPE_QRCODE(二维码)
QrConfig.SCANVIEW_TYPE_BARCODE(条形码)
setCustombarcodeformatint设置指定扫码类型(举例:QrConfig.BARCODE_EAN13),此项只有在 ScanType 设置为自定义时才生效
setIsOnlyCenterBoolean设置是否只识别扫描框中的内容(默认为全屏扫描)
setPlaySoundBoolean设置扫描成功后是否有提示音
setDingPathint自定义提示音(举例:R.raw.test,不设置为默认的)
setNeedCropBoolean从相册选择二维码之后再次手动框选二维码(默认为 true)
setShowZoomBoolean是否开启手动调整焦距(默认为 false)
setAutoZoomBoolean是否开启自动调整焦距(默认为 false)
setFingerZoomBoolean是否开启双指调整焦距(默认为 false)
setScreenOrientationint设置屏幕方向
QrConfig.SCREEN_PORTRAIT(纵向)
QrConfig.SCREEN_LANDSCAPE(横向)
QrConfig.SCREEN_SENSOR(传感器方向)
setDoubleEngineBoolean是否开启双识别引擎(默认为 false)
setLooperScanBoolean是否开启连续扫描(默认为 false)
setOpenAlbumTextString设置打开相册的文字
setLooperWaitTimeint设置连续扫描间隔时间,单位毫秒(默认为 0)
setScanLineStyleint设置扫描动画样式
ScanLineView.style_radar(雷达)
ScanLineView.style_gridding(网格)
ScanLineView.style_hybrid(网格+雷达) 
ScanLineView.style_line(线条)(默认为雷达)
setAutoLightBoolean是否开启自动灯光(默认为 false)
setShowVibratorBoolean是否开启震动提醒(默认为 false)
setBackImageResint设置 title 返回图标,不设置为默认
setLightImageResint设置闪光灯图标,不设置为默认
setAblumImageResint设置相册图标,不设置为默认

5.混淆

-keep class cn.bertsir.zbar.Qr.**  *; 

6.依赖引用

compile 'com.google.zxing:core:3.3.0'//zxing
compile 'com.soundcloud.android:android-crop:1.0.1@aar'//图片裁切

二维码也就这些需求吧,这么简单就可以搞定了,识别速度是 zxing 的很多倍!方便了你的话可不可以给个 Start,如遇 BUG 请 Issues

DEMO

DEMO 下载

打赏扫这里👇一分也是❤️(可以在备注中填写自己的 github 链接)

 

打赏历史(排名不分先后)

nameplatformprice备注
找不到记录的可爱大佬们微信/支付宝----
*走微信¥5.00--
Q*x微信¥2.33感谢开源 zBar 辛苦
*瑞波支付宝¥6.66--
*瑞波支付宝¥6.66--
*世东支付宝¥6.60感谢
*天微信¥5.00--
*洪兵支付宝¥5.00--
*德明支付宝¥6.66感谢开源扫码库

License

MIT License

Copyright (c) 2018 bertsir

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

以上是关于zbar 扫描快,zxing 可以生成和识别本地,So,我就把他们结合在了一起,这样 Android 二维码(条形码)功能就更便捷了的主要内容,如果未能解决你的问题,请参考以下文章

android中Zing二维码扫描,二维码生成

二维码识别之Android完整编译Zbar

二维码识别之Android完整编译Zbar

二维码识别之Android完整编译Zbar

ZBar 是款桌面电脑用条形码/二维码扫描工具

Zxing 的集成 ---- Maven 对应 Gradle 的写法