Nic0w / zbars

High-level rust bindings to the zbar library

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

zbars

Renamed from zbar-rs

crates.io version build status downloads docs.rs docs

High-level rust bindings to the zbar library

Just started implementing a high-level rust binding to zbar barcode scanner library. Some things already work, but there is still a lot to do. So don't expect this to work without flaws. And expect things to break!

Building and Running

You need zbar native library in order to build zbars.

Linux

On Linux you can simply install zbar development package. The build script uses pkg-config to probe for zbar native library.

Ubuntu:

# apt install libzbar-dev

Arch Linux

# pacman -S zbar

Feature zbar_fork_if_available is enabled by default and builds the crate against zbar 0.2 which is a more recent fork (https://github.com/procxx/zbar) if found by pkg-config.

Nothing special to consider when running your binary on Linux.

Windows

Building on Windows is a little bit uncomfortable. I only tested it on x64 with MSVC toolchain. At first you must download this ZBar Visual Studio project. You can either build the project or just use the prebuilt binaries in the project's lib directory. Then set the following environment variables to be able to build:

ZBAR_LIB_DIR="build output directory or directory where prebuilds are stored"
ZBAR_INCLUDE_DIR="directory where zbar.h is stored (usually named include)"

In order to run you also need to compile libiconv or download libiconv.dll from somewhere else. Both libzbar64-0.dll from lib directory and libiconv.dll have to be copied to the directory where your binary is.

Usage

Scan an image for QR codes:

extern crate zbars;

use zbars::prelude::*;

pub fn main() {
    let image = ZBarImage::from_path("test/qr_hello-world.png")
        .expect("unable to create image");

    let scanner = ZBarImageScanner::builder()
        .with_config(ZBarSymbolType::ZBAR_QRCODE, ZBarConfig::ZBAR_CFG_ENABLE, 1)
        .build()
        .unwrap();

    let symbol_set = scanner.scan_image(&image)
        .expect("error on scanning image");

    symbol_set.iter()
        .for_each(|symbol| {
            println!("symbol decoded: {}", symbol.data());
            symbol.polygon().iter()
                .enumerate()
                .for_each(|(i, point)| {
                    println!("{}. point: {:?}", i, point);
                })
        });
}

About

High-level rust bindings to the zbar library

License:GNU Lesser General Public License v2.1


Languages

Language:Rust 100.0%Language:C 0.0%