diff options
Diffstat (limited to 'dichroism/src/image_api.rs')
-rw-r--r-- | dichroism/src/image_api.rs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/dichroism/src/image_api.rs b/dichroism/src/image_api.rs new file mode 100644 index 0000000..d1649d5 --- /dev/null +++ b/dichroism/src/image_api.rs @@ -0,0 +1,40 @@ +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<data>.+)").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(); + } +} |