Git Product home page Git Product logo

qzxing's Introduction

qzxing

Qt/QML wrapper library for the ZXing barcode image processing library.

Supports barcode decoding for the following types:

  • UPC-A
  • UPC-E
  • EAN-8
  • EAN-13
  • ITF
  • Code 39
  • Code 93
  • Code 128 (GS1)
  • Codabar
  • QR Code
  • Data Matrix
  • Aztec (beta)
  • PDF 417

Supports barcode encoding for the following types:

  • QR Code

Table of contents

  1. How to include
    1. Embed the source code
    2. Compile the project as an external library
    3. Control dependencies
      1. QZXing (core)
      2. QZXing (core + QML)
      3. QZXing + QZXingFilter
  2. How to use
    1. Decoding operation
      1. C++/Qt
      2. Qt Quick
    2. Encoding operation
      1. C++/Qt
      2. Qt Quick
    3. Encoded text format Information
  3. Contact

How to include

The project can be used in two ways:

Embed the source code.

Copy source code folder of QZXing to the root of your project. Add the following line to your .pro file. For more information see here.

include(QZXing/QZXing.pri)

Compile the project as an external library

Open QZXing project (QZXing.pro) and compile. If it is needed to compile as static library, uncomment the following line in the .pro file.

CONFIG += staticlib

Control dependencies

Project file config tags are now introduced to be able to control the dependencies of the library accoring to the needs. The core part requires only "core" and "gui" Qt modules. Though for backward compatibility "quick" Qt module is also required. The 3 level of dependencies are:

QZXing (core)

By including QZXing.pri or by building QZXing.pro you get the core functionality of QZXing which requires only QtCore and QtGui (because of QImage).

Warning! The initial default configuration till 20/03/2017 was including qzxing_qml. This tag could not be removed once added, so it was needed to be removed from the defaults.

QZXing (core + QML)

If an application is going to use QML functionality, it is now possible to add the dependency to it. This can be done by adding the folloing line to the .pro file of its project:

CONFIG += qzxing_qml

QZXing + QZXingFilter

QZXing includes QZXingFilter, a QAbstractVideoFilter implementation to provide a mean of providing live feed to the decoding library. It automatically includes QML implementation as well. This option requires "multimedia" Qt module this is why it is considered as a separate configuration. It can be used by adding the folloing line to the .pro file of a project:

CONFIG += qzxing_multimedia

How to use

Follows simple code snippets that brefly show the use of the library. For more details advise the examples included in the repository and the wiki.

Decoding operation

C++/Qt

#include <QZXing.h>

int main() 
{
	QImage imageToDecode("file.png");
	QZXing decoder;
	decoder.setDecoder( DecoderFormat_QR_CODE | DecoderFormat_EAN_13 );
	QString result = decoder.decodeImage(imageToDecode);
}

Qt Quick

First register QZXing type to the QML engine.

#include <QZXing.h>

int main() 
{
	...
	QZXing::registerQMLTypes();
	...
}

The in the QML file

import QZXing 2.3

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

Image{
	id:imageToDecode
}

QZXing{
	id: decoder

	enabledDecoders: QZXing.DecoderFormat_QR_CODE

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

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

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

Encoding operation

C++/Qt

The encoding function has been written as static as it does not have any dependencies to data other than the ones provided by the arguments.

Use the encoding function with its default settings:

  • Format: QR Code
  • Size: 240x240
  • Error Correction Level: Low (L)
#include <QZXing.h>

int main() 
{
    QString data = "text to be encoded";
    QImage barcode = QZXing::encodeData(data);
}    

Or use the encoding function with custom settings:

QString data = "text to be encoded";
QImage barcode = QZXing::encodeData(data, QZXing::EncoderFormat_QR_CODE,
								QSize(width.toInt(), height.toInt()), QZXing::EncodeErrorCorrectionLevel_H);

Qt Quick

The encoding function can be easily used in QML through QZXing's Image Provider: "image://QZXing/encode/<data_to_be_encoded>". As with the C++ example, it can either be used with the default settings or with custom settings.

Default settings:

import QZXing 2.3

TextField {
	id: inputField
	text: "Hello world!"
}

Image{
	source: "image://QZXing/encode/" + inputField.text;
	cache: false;
}

Or use the encoding function with the optional custom settings that are passed like URL query parameters:

attribute name value description
corretionLevel L, M, Q, H the error correction level
format qrcode the encode formatter. Currently only QR Code.

the size of the image can be adjusted by using the Image.sourceWidth and Image.sourceHeight properties of Image QML element.

import QZXing 2.3

TextField {
	id: inputField
	text: "Hello world!"
}

Image{
	source: "image://QZXing/encode/" + inputField.text +
					"?corretionLevel=M" +
					"&format=qrcode"
	sourceSize.width: 320
	sourceSize.height: 320
}

Encoded text format Information

Here is a list of contents that have been encoded and tested to be recognizable by the Android ZXing decoding application: QR Code encoding wiki page

Contact

In case of bug reports or feature requests feel free to open an issue.

qzxing's People

Contributors

ftylitak avatar milianw avatar alexxey593 avatar kanglin avatar nickdiego avatar chalker avatar dkormalev avatar arminfelder avatar okcerg avatar kanocz avatar err4nt avatar neutrinoyu avatar sergey-platonov avatar

Watchers

James Cloos avatar

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.