qr2
This commit is contained in:
@@ -1,25 +1,34 @@
|
||||
use std::ffi::CString;
|
||||
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]
|
||||
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()
|
||||
}
|
||||
|
||||
pub fn parse_qr() -> String {
|
||||
let img = image::load_from_memory(SAMPLE_QR_BYTES).unwrap();
|
||||
#[no_mangle]
|
||||
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 mut ret = vec![];
|
||||
let results = decoder.decode(&img);
|
||||
for result in results {
|
||||
let qr = result.unwrap();
|
||||
let qr = result.unwrap_or_else(|e| format!("Decode QR error: {}", e));
|
||||
println!("{}", 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;
|
||||
|
||||
// from https://tilman.xyz/blog/2019/12/building-webassembly-for-deno/
|
||||
function readString(memory, ptr) {
|
||||
const mem = new Uint8Array(memory.buffer, ptr);
|
||||
let length;
|
||||
@@ -11,4 +12,5 @@ function readString(memory, ptr) {
|
||||
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