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}