qr2
This commit is contained in:
@@ -1,25 +1,34 @@
|
|||||||
use std::ffi::CString;
|
use std::ffi::CString;
|
||||||
use std::os::raw::c_char;
|
use std::os::raw::c_char;
|
||||||
|
|
||||||
pub const SAMPLE_QR_BYTES: &[u8] = std::include_bytes!("sample_qr.png");
|
pub const SAMPLE_QR_BYTES: &[u8] = std::include_bytes!("sample_qr.png");
|
||||||
|
pub const SAMPLE_QR_BYTES_2: &[u8] = std::include_bytes!("sample_qr_2.png");
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C" fn parse_default_qr() -> *mut c_char {
|
pub extern "C" fn parse_default_qr() -> *mut c_char {
|
||||||
let s = CString::new(parse_qr()).unwrap();
|
let s = CString::new(parse_qr(SAMPLE_QR_BYTES)).unwrap();
|
||||||
s.into_raw()
|
s.into_raw()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn parse_qr() -> String {
|
#[no_mangle]
|
||||||
let img = image::load_from_memory(SAMPLE_QR_BYTES).unwrap();
|
pub extern "C" fn parse_default_qr_2() -> *mut c_char {
|
||||||
|
let s = CString::new(parse_qr(SAMPLE_QR_BYTES_2)).unwrap();
|
||||||
|
s.into_raw()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn parse_qr(bs: &[u8]) -> String {
|
||||||
|
let img = match image::load_from_memory(bs) {
|
||||||
|
Ok(i) => i, Err(e) => return format!("Load image error: {}", e),
|
||||||
|
};
|
||||||
|
|
||||||
let decoder = bardecoder::default_decoder();
|
let decoder = bardecoder::default_decoder();
|
||||||
|
|
||||||
let mut ret = vec![];
|
let mut ret = vec![];
|
||||||
let results = decoder.decode(&img);
|
let results = decoder.decode(&img);
|
||||||
for result in results {
|
for result in results {
|
||||||
let qr = result.unwrap();
|
let qr = result.unwrap_or_else(|e| format!("Decode QR error: {}", e));
|
||||||
println!("{}", qr);
|
println!("{}", qr);
|
||||||
ret.push(qr);
|
ret.push(qr);
|
||||||
}
|
}
|
||||||
ret.join(",")
|
ret.join("||")
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
deno_wasm_qr/decodeqr/src/sample_qr_2.png
Normal file
BIN
deno_wasm_qr/decodeqr/src/sample_qr_2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 212 KiB |
@@ -4,6 +4,7 @@ const wasmInstance = new WebAssembly.Instance(wasmModule);
|
|||||||
|
|
||||||
const linearMemory = wasmInstance.exports.memory;
|
const linearMemory = wasmInstance.exports.memory;
|
||||||
|
|
||||||
|
// from https://tilman.xyz/blog/2019/12/building-webassembly-for-deno/
|
||||||
function readString(memory, ptr) {
|
function readString(memory, ptr) {
|
||||||
const mem = new Uint8Array(memory.buffer, ptr);
|
const mem = new Uint8Array(memory.buffer, ptr);
|
||||||
let length;
|
let length;
|
||||||
@@ -11,4 +12,5 @@ function readString(memory, ptr) {
|
|||||||
return new TextDecoder("utf-8").decode(new Uint8Array(mem.buffer, ptr, length));
|
return new TextDecoder("utf-8").decode(new Uint8Array(mem.buffer, ptr, length));
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(readString(linearMemory, wasmInstance.exports.parse_default_qr()));
|
console.log("DECODED:\n" + readString(linearMemory, wasmInstance.exports.parse_default_qr()));
|
||||||
|
console.log("DECODED:\n" + readString(linearMemory, wasmInstance.exports.parse_default_qr_2()));
|
||||||
|
|||||||
Reference in New Issue
Block a user