Qt中QZXing 的编译与使用

目录
  • 0.前言
  • 1.编译
  • 2.二维码生成
  • 3.二维码识别

0.前言

zxing 是一个开源的一维/二维条码图像处理库,当前版本为 Java 语言开发:

https://github.com/zxing/zxing

QZXing 是 ZXing 的 Qt 移植版本,同样还有 cpp 等语言和框架的移植版本。从 QZXing 的文档可以看到,只有 QR Code 二维码支持编码,其他都只支持解码。

https://github.com/ftylitak/qzxing

1.编译

下载源码后可以用 CMake 或者直接打开 pro 进行构建。网上有人编译失败,但是我用 Qt5.15 + VS2019 编译 QZXing3.3.0 并没有出现编译问题。 编译复制头文件和库文件到我们的工程。

测试工程(Qt5 + MSVC2019):

https://github.com/gongjianbo/MyTestCode2021/tree/master/Qt/QtQZXingVS2019

2.二维码生成

先打开编码功能,添加一个宏:

DEFINES += ENABLE_ENCODER_GENERIC

然后从 QZXing README 看简单的生成示例:

#include "QZXing.h"

int main()
{
    QString data = "text to be encoded";
    QImage barcode = QZXing::encodeData(data);
    //QImage barcode = QZXing::encodeData(data, QZXing::EncoderFormat_QR_CODE,
    //                                    QSize(240, 240), QZXing::EncodeErrorCorrectionLevel_H);
}

接口声明:

#ifdef ENABLE_ENCODER_GENERIC
//二维码编码接口,目前仅支持QR Code码
//QZXingEncoderConfig是个结构体,成员如下一个重载接口的参数
static QImage encodeData(const QString &data,
                         const QZXingEncoderConfig &encoderConfig);

//二维码编码接口,目前仅支持QR Code码
//encoderFormat 编码格式枚举
//encoderImageSize 生成二维码的大小
//errorCorrectionLevel 纠错等级
//border =true会有一圈白边,感觉没啥用
//transparent =true会半透明,感觉没啥用
static QImage encodeData(const QString& data,
                         const EncoderFormat encoderFormat = EncoderFormat_QR_CODE,
                         const QSize encoderImageSize = QSize(240, 240),
                         const EncodeErrorCorrectionLevel errorCorrectionLevel = EncodeErrorCorrectionLevel_L,
                         const bool border = false,
                         const bool transparent = false);
#endif // ENABLE_ENCODER_GENERIC

由于是使用 Qt 封装的,所以不用像其他库那样还要自己根据矩阵结果绘制 QImage。

3.二维码识别

文档里着重讲了解码的使用,并且封装了相应的 QML 组件。

C++ 使用:

#include "QZXing.h"

int main()
{
    QImage imageToDecode("file.png");
    QZXing decoder;
    //必要设置
    decoder.setDecoder(QZXing::DecoderFormat_QR_CODE | QZXing::DecoderFormat_EAN_13 );

    //可选设置
    //decoder.setSourceFilterType(QZXing::SourceFilter_ImageNormal | QZXing::SourceFilter_ImageInverted);
    decoder.setSourceFilterType(QZXing::SourceFilter_ImageNormal);
    decoder.setTryHarderBehaviour(QZXing::TryHarderBehaviour_ThoroughScanning | QZXing::TryHarderBehaviour_Rotate);

    //解码
    QString result = decoder.decodeImage(imageToDecode);
}

QML 使用:

#include "QZXing.h"

int main()
{
	...
	QZXing::registerQMLTypes();
	...
}
import QtQuick 2.0
import QZXing 3.3

Item{
    function decode(preview) {
        imageToDecode.source = preview
        decoder.decodeImageQML(imageToDecode);
    }

    Image{
        id:imageToDecode
    }

    QZXing{
        id: decoder

        enabledDecoders: QZXing.DecoderFormat_QR_CODE

        /
        //可选设置
        tryHarderType: QZXing.TryHarderBehaviour_ThoroughScanning | QZXing.TryHarderBehaviour_Rotate

        imageSourceFilter: QZXing.SourceFilter_ImageNormal //| QZXing.SourceFilter_ImageInverted
        /

        onDecodingStarted: console.log("Decoding of image started...")

        onTagFound: console.log("Barcode data: " + tag)

        onDecodingFinished: console.log("Decoding finished " + (succeeded==true ? "successfully" : "unsuccessfully") )
    }
}

参数较多,如果有疑问可以搜 zxing 的文档。经测试,该库是可以做一些简单的图像识别,可以识别截图中的二维码,但是对拍照的二维码识别不了,所以要直接识别还是得用上图像处理库。

到此这篇关于Qt中QZXing 的编译与使用的文章就介绍到这了,更多相关QZXing 编译与使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • asp.net用Zxing库实现条形码输出的具体实现

    这个简单的问题,困扰了我将近两个小时,主要是再官方文档上没有找到demo,那只能用搜索引擎了,看看其他程序员写的程序,但是发现处处是坑,看了四五个例子,没有一个可以正常运行的,全部报错,经过一个多小时的尝试,才最终搞定.不多说了,直接上截图和代码. 首先要在项目中添加zxing.dll引用(zxing.dll下载地址http://www.jb51.net/dll/zxing.dll.html) 其次就是建立aspx文件,在后台中代码如下 复制代码 代码如下: using ZXing.Common

  • Android中使用ZXing生成二维码(支持添加Logo图案)

    ZXing是谷歌的一个开源库,可以用来生成二维码.扫描二维码.本文所介绍的是第一部分. 首先上效果图: ZXing相关各种文件官方下载地址:https://github.com/zxing/zxing/releases 或者在这里下载(只有本项目所用的jar包,版本号:3.2.0):链接:http://pan.baidu.com/s/1pLqAR5x 1.生成二维码的工具类 /** * 二维码生成工具类 */ public class QRCodeUtil { /** * 生成二维码Bitmap

  • Android上使用ZXing识别条形码与二维码的方法

    目前有越来越多的手机具备自动对焦的拍摄功能,这也意味着这些手机可以具备条码扫描的功能.手机具备条码扫描的功能,可以优化购物流程,快速存储电子名片(二维码)等. 本文所述实例就使用了ZXing 1.6实现条码/二维码识别.ZXing是个很经典的条码/二维码识别的开源类库,早在很久以前,就有开发者在J2ME上使用ZXing了,只不过需要支持JSR-234规范(自动对焦)的手机才能发挥其威力,而目前已经有不少Android手机具备自动对焦的功能. 本文代码运行的结果如下,使用91手机助手截图时,无法截

  • 详解ZXing-core生成二维码的方法并解析

    二维码无处不在,扫一扫有礼品哦,现在二维码这么流行,想必大家不是很清楚二维码是怎么生成的吧,现在小编通过给大家分享本文帮助大家学习二维码生成的方法. 其实主要是利用goggle发布的jar来使用的此功能. 1.二维码的生成 将Zxing-core.jar 包加入到classpath下. 二维码的生成需要借助MatrixToImageWriter类,该类是由Google提供的,可以将该类拷贝到源码中,这里我将该类的源码贴上,可以直接使用. 直接可以生成二维码的代码 public void test

  • C#利用ZXing.Net生成条形码和二维码

    本文是利用ZXing.Net在WinForm中生成条形码,二维码的小例子,仅供学习分享使用,如有不足之处,还请指正. 什么是ZXing.Net? ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口.而ZXing.Net是ZXing的端口之一. 在工程中引用ZXing.Net 在项目中,点击项目名称右键-->管理NuGet程序包,打开NuGet包管理器窗口,进行搜索下载即可,如下图所示: ZXing.Net关键类结构图 包括Reader[识

  • c#裁剪图片后使用zxing生成二维码示例分享

    复制代码 代码如下: /// <summary>/// 生成二维码/// </summary>/// <param name="fileName">生成二维码路径</param>/// <param name="url">生成的内容</param>/// <param name="width">二维码宽</param>/// <param nam

  • .NET C#利用ZXing生成、识别二维码/条形码

    一.首先下载 ZXing.Net 地址是:http://zxingnet.codeplex.com/releases/view/117068 然后将对应版本 .dll 拖入项目中,再引用之. 主要是用 BarcodeWriter.BarcodeReader. 二.生成二维码 .NET 平台的代码始终要简单些. QrCodeEncodingOptions options = new QrCodeEncodingOptions(); options.CharacterSet = "UTF-8&quo

  • C# zxing二维码写入的实例代码

    复制代码 代码如下: private void button1_Click(object sender, EventArgs e)        {            if (string.IsNullOrEmpty(this.textBox1.Text.Trim()))            {                MessageBox.Show("请输入需要转换的信息!");                return;            } string con

  • Java中基于maven实现zxing二维码功能

    maven所需jar <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>com.google.zxing</groupId> <artifac

  • Qt中QZXing 的编译与使用

    目录 0.前言 1.编译 2.二维码生成 3.二维码识别 0.前言 zxing 是一个开源的一维/二维条码图像处理库,当前版本为 Java 语言开发: https://github.com/zxing/zxing QZXing 是 ZXing 的 Qt 移植版本,同样还有 cpp 等语言和框架的移植版本.从 QZXing 的文档可以看到,只有 QR Code 二维码支持编码,其他都只支持解码. https://github.com/ftylitak/qzxing 1.编译 下载源码后可以用 CM

  • 浅谈Qt中使用CEF的几个要点(Windows下)

    最近项目中要在Qt中使用CEF(Chromium Embedded Framework),在这里总结下其中的几个要点. 下载合适的CEF版本 关于CEF的简介我们这里就不做介绍了,下载CEF可以有2种选择: 1.源码:强烈不建议下载源代码并编译构建(学习代码除外),下载源码需要你FQ.有良好的网速(要下载)和足够的耐心(据说有4.5个G,真的要下半天). 2.自动构建版本:推荐这个使用这个版本.该版本提供了大部分已经编译完成的动态库及资源,只需要开发者手动编译一个wrapper静态库就可以了.这

  • Qt中JSON操作的具体使用

    目录 QJsonValue QJsonObject QJsonArray QJsonDocument JSON(JavaScript Object Notation,js对象标记)是一种轻量级的数据交换格式.它基于ECMAScript的一个子集,使用完全独立于编程语言的文本格式来存储和表示数据.简洁和清晰的的层次结构使得JSON成为理想的数据交换语言.易于人阅读和编写,同时也易于机器解析和生成,并有效的提升网络传输效率.关于JSON的更多解释,请参看JSON官网. 在Qt库中,为JSON的相关操

  • Java中的动态和静态编译实例详解

    Java中的动态和静态编译实例详解 首先,我们来说说动态和静态编译的问题. Q: java和javascript有什么区别?    总结了一下:有以下几点吧: 1.首先从运行环境来说java代码是在JVM上编译成class文件,而javascript则直接在浏览器上加载运行. 2.由第一点可看出,java代码需要编译,而javascript不需要编译. 3.从语言性质来说,java是一种高级编程语言,对变量检查要求严格,javascript只是一个简单的解释性的脚本语言,对变量检查及要求很弱.

  • C#实现将记事本中的代码编译成可执行文件的方法

    本文实例讲述了C#实现将记事本中的代码编译成可执行文件的方法,运行环境为VS2012,具体方法如下: 1.在记事本中编写如下代码: using System; namespace HelloWorld { public class Program { static void Main(string[] args) { Console.WriteLine("Hello,World"); Console.ReadKey(); } } } 2.保存为HelloWorld.txt,位置在F:\

  • 深入理解Qt中各种消息框对话框的使用

    最近在学习Qt框架,今天学习了一下消息框的使用, 现整理出来以作记录. 在程序运行时,经常需要提示用户一些信息,比如警告啊,提示啊,建议啊之类的东西.这些东西基本上是通过消息框与用户进行交互的,Qt中主要是用QMessageBox类来加以实现的. 消息框一般分为七种: Question询问消息框:为正常的操作提供一个简单的询问 Information信息消息框:为正常操作提供一个提示 Warning提示消息框:提醒用户发生了一个错误 Critical警告消息框:警告用户发生了一个严重错误 Abo

  • 在Qt中正确的设置窗体的背景图片的几种方法总结

    Qt中正确的设置窗体的背景图片的方法大致有两种,下面将逐个讲解: 一. 利用styleSheet设置窗体的背景图片 使用stylesheet设置窗体的背景图片的时候,可以直接按照下图的操作去进行即可,如下图所示: 但是,需要注意的是: 1.在QWidget中这种方法是不行的,如果你足够细心的话,你会发现使用同样的设置背景图片的方法,背景图片其实并没有发生真实改变,但是它的子窗体背景图片是会发生改变的. 其实我们可以通过在添加一个i额QWidget来解决这个问题,即在QtDesigner中添加一个

  • IDEA 中使用 ECJ 编译出现 java.lang.IllegalArgumentException的错误问题

    IDEA 中使用 ECJ 编译出现 java.lang.IllegalArgumentException IDEA内置的ECJ版本太高了 把图中红框部分的内容替换一个合适的版本jar包就行了.这个jar除了可以单独下载,在tomcat / lib 目录下也存在 ps:IDEA中的tomcat启动出现java.lang.IllegalArgumentException,java.util.zip.ZipException 我的错误:war中包含的的jar版本与pom.xml中配置的版本不一致.wa

  • Eclipse中安装反编译工具Fernflower的方法(Enhanced Class Decompiler)

    IntelliJ IDEA一个吸引人的地方在于,他有比较好的反编译工具,这让Eclipse用户牙痒痒.但不要紧,本文介绍如何在Eclipse IDE中使用IntelliJ IDEA的反编译工具Fernflower. 为啥需要反编译 很多jar不提供源码,那么打开class是这个鸟样. 不具备人类可读性.因此需要反编译. 什么是Fernflower 那么我是怎么知道Fernflower的呢?你随便用IntelliJ IDEA打开一个jar中的class文件,可以看到下面的信息,这就是IEDA中的反

  • Qt中CQGUI框架之阴影圆角窗口实现

    大家好,我是IT文艺男,来自一线大厂的一线程序员 今天给大家讲解基于C++/Qt的CQGUI框架的阴影圆角窗口实现,实现效果如下图所示:: CQGUI开发环境:: Microsoft Visual Studio 2019 Qt5.15.1 步骤如下: 一.继承关系 class LoginPanel : public QDialog 二.窗口属性 setAttribute(Qt::WA_TranslucentBackground); //设置顶层面板背景透明 setWindowFlags(Qt::

随机推荐