use crate::result::Result; use base64::decode; use regex::Regex; lazy_static! { static ref DATA_URI_RE: Regex = Regex::new("^data:image/(png|jpeg);base64,(?P.+)").expect("Couldn't parse Regex!"); } pub fn data_uri_to_files(uri: &str) -> Result<()> { let caps = if let Some(c) = DATA_URI_RE.captures(uri) { c } else { todo!(); }; let data = caps .name("data") .expect("Data URI data extraction should never fail.") .as_str(); let bytes = decode(data)?; let img = image::load_from_memory(&bytes)?; img.save("test_full.jpg")?; let thumb = img.thumbnail(200, 200); thumb.save("test_thumbnail.jpg")?; Ok(()) } #[cfg(test)] mod tests { use super::*; const TEST_DATA_URI: &str = include_str!("unit_test_data/img_data_uri.txt"); #[test] fn test_data_uri_to_files() { data_uri_to_files(TEST_DATA_URI).unwrap(); } }