Crates.io | zbars |
lib.rs | zbars |
version | 0.2.0 |
source | src |
created_at | 2018-05-07 21:11:48.013443 |
updated_at | 2018-05-08 19:45:24.437978 |
description | High-level rust bindings zo the zbar library |
homepage | |
repository | https://github.com/marhkb/zbar-rs.git |
max_upload_size | |
id | 64199 |
size | 78,241 |
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!
You need zbar native library
in order to build zbars
.
On Linux you can simply install zbar development package. The build script uses
pkg-config
to probe for zbar native library.
# apt install libzbar-dev
# 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.
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.
Scan an image for QR codes:
extern crate zbars;
use zbars::prelude::*;
pub fn main() {
let mut image = ZBarImage::from_path("test/qrcode.png")
.expect("unable to create image");
let image_scanner = ImageScanner::builder()
.with_config(ZBarSymbolType::ZBAR_QRCODE, ZBarConfig::ZBAR_CFG_ENABLE, 1)
.build();
let symbol_set = image_scanner.scan_image(&mut 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);
})
});
}