use std::fs;
use image::{Luma};
use qrcode::{QrCode};
use qrcode::render::{svg};
use image;
pub fn qrcode_create(text: &str, mode: &str, filename: &str) -> bool {
let code = QrCode::new(text).unwrap();
match mode {
"svg" => {
let string = code.render()
.min_dimensions(200, 200)
.dark_color(svg::Color("#000000"))
.light_color(svg::Color("#ffffff"))
.build();
match fs::write(filename, string) {
Ok(_) => true,
Err(_) => false
}
}
"png" => {
let image = code.render::<Luma<u8>>()
.min_dimensions(200, 200)
.build();
match image.save(filename) {
Ok(()) => true,
Err(_) => false
}
}
_ => {
let image = code.render::<Luma<u8>>()
.min_dimensions(200, 200)
.build();
match image.save(filename) {
Ok(()) => true,
Err(_) => false
}
}
}
}
pub fn qrcode_read(filename: &str) -> Vec<String> {
let mut qrcode = vec![];
let img = image::open(filename);
let img_gray = match img {
Ok(e) => e.into_luma8(),
Err(_) => {
return qrcode;
}
};
let mut decoder = quircs::Quirc::default();
let codes = decoder.identify(img_gray.width() as usize, img_gray.height() as usize, &img_gray);
for code in codes {
let code = match code {
Ok(e) => e,
Err(_) => {
return qrcode;
}
};
let decoded = match code.decode() {
Ok(e) => e,
Err(_) => {
return qrcode;
}
};
qrcode.push(format!("{}", std::str::from_utf8(&decoded.payload.clone()).unwrap()));
}
qrcode
}