image_base64_wasm/
lib.rs

1extern crate regex;
2extern crate data_encoding;
3
4use std::fs::File;
5use regex::Regex;
6use std::io::Read;
7use std::string::String;
8use data_encoding::BASE64_MIME;
9
10pub fn get_file_type(hex: &str) -> &str {
11    if Regex::new(r"^ffd8ffe0").unwrap().is_match(hex) { 
12        return "jpeg" 
13    } else if Regex::new(r"^89504e47").unwrap().is_match(hex) {  
14        return "png" 
15    } else if Regex::new(r"^47494638").unwrap().is_match(hex) { 
16        return "gif"
17    } else if Regex::new(r"^00000100").unwrap().is_match(hex) {
18        return "x-icon"
19    }
20    panic!("invalid file type")
21}
22
23pub fn vec_to_base64_http(vec: Vec<u8>, data_type: &str) -> String {
24    let base64 = BASE64_MIME.encode(&*vec);
25    return format!("data:{};base64,{}", data_type, base64.replace("\r\n", ""));
26}
27
28pub fn vec_to_base64(vec: Vec<u8>) -> String {
29    let base64 = BASE64_MIME.encode(&*vec);
30    let hex = hex::encode(vec);
31    return format!("data:image/{};base64,{}", get_file_type(&hex), base64.replace("\r\n", ""));
32}
33
34pub fn to_base64(path: &str) -> String {
35    let mut file = File::open(path).unwrap();
36    let mut vec = Vec::new();
37    let _ = file.read_to_end(&mut vec);
38    return vec_to_base64(vec);
39}
40
41pub fn from_base64(base64: String) -> Vec<u8> {
42    let offset = base64.find(',').unwrap_or(base64.len())+1;
43    let mut value = base64;
44    value.drain(..offset);
45    return BASE64_MIME.decode(value.as_ref()).unwrap();
46}