image_base64/
lib.rs

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