diff options
Diffstat (limited to 'dichroism/src/models')
-rw-r--r-- | dichroism/src/models/mod.rs | 6 | ||||
-rw-r--r-- | dichroism/src/models/new_photo.rs | 6 | ||||
-rw-r--r-- | dichroism/src/models/new_photo_data.rs | 95 | ||||
-rw-r--r-- | dichroism/src/models/new_photo_set.rs | 8 | ||||
-rw-r--r-- | dichroism/src/models/photo.rs | 4 | ||||
-rw-r--r-- | dichroism/src/models/photo_set.rs | 25 |
6 files changed, 13 insertions, 131 deletions
diff --git a/dichroism/src/models/mod.rs b/dichroism/src/models/mod.rs index e0fc3bd..529a9bc 100644 --- a/dichroism/src/models/mod.rs +++ b/dichroism/src/models/mod.rs @@ -1,13 +1,7 @@ -mod new_photo; -mod new_photo_data; -mod new_photo_set; mod photo; mod photo_set; mod product; -pub use new_photo::*; -pub use new_photo_data::*; -pub use new_photo_set::*; pub use photo::*; pub use photo_set::*; pub use product::*; diff --git a/dichroism/src/models/new_photo.rs b/dichroism/src/models/new_photo.rs deleted file mode 100644 index d348e95..0000000 --- a/dichroism/src/models/new_photo.rs +++ /dev/null @@ -1,6 +0,0 @@ -use crate::schema::photos; -#[table_name = "photos"] -#[derive(Debug, Insertable)] -pub struct NewPhoto { - pub path: String, -} diff --git a/dichroism/src/models/new_photo_data.rs b/dichroism/src/models/new_photo_data.rs deleted file mode 100644 index 19a6557..0000000 --- a/dichroism/src/models/new_photo_data.rs +++ /dev/null @@ -1,95 +0,0 @@ -use super::NewPhoto; -use super::NewPhotoSet; -use crate::error::DichroismError; -use crate::result::Result; -use base64::decode; -use image::imageops::FilterType; -use image::DynamicImage; -use image::GenericImageView; -use regex::Regex; -use std::path::PathBuf; -use uuid::Uuid; - -use once_cell::sync::Lazy; -static DATA_URI_RE: Lazy<Regex> = Lazy::new(|| { - Regex::new("^data:image/(png|jpeg);base64,(?P<data>.+)") - .expect("Couldn't parse data URI Regex.") -}); - -pub struct NewPhotoSetData { - original: DynamicImage, // original, just for safe-keeping - fullsize: DynamicImage, // full-size, "zoomed" view - base: DynamicImage, // basic viewing - thumbnail: DynamicImage, // tiny, square thumbnail -} - -impl NewPhotoSetData { - pub fn from_data_uri(uri: &str) -> Result<Self> { - let data = DATA_URI_RE - .captures(uri) - .ok_or(DichroismError::UriDataExtract)? - .name("data") - .ok_or(DichroismError::UriDataExtract)? - .as_str(); - let original = image::load_from_memory(&decode(data)?)?; - let fullsize = original.resize(1000, 1000, FilterType::Lanczos3); - let base = original.resize(640, 640, FilterType::Lanczos3); - - let (width, height) = original.dimensions(); - let thumbnail = if width > height { - let offset = (width - height) / 2; - original.crop_imm(offset, 0, width - offset * 2, height) - } else { - let offset = (height - width) / 2; - original.crop_imm(0, offset, width, height - offset * 2) - } - .resize(300, 300, FilterType::Lanczos3); - - Ok(NewPhotoSetData { - original, - fullsize, - base, - thumbnail, - }) - } - - pub fn commit(self, prefix: &str) -> Result<NewPhotoSet> { - Ok(NewPhotoSet { - original: self.commit_single(prefix, &self.original)?, - fullsize: self.commit_single(prefix, &self.fullsize)?, - base: self.commit_single(prefix, &self.base)?, - thumbnail: self.commit_single(prefix, &self.thumbnail)?, - }) - } - - fn commit_single(&self, prefix: &str, image: &DynamicImage) -> Result<NewPhoto> { - let base_name = Uuid::new_v3(&Uuid::NAMESPACE_OID, &image.to_bytes()) - .to_hyphenated() - .to_string(); - let mut path = PathBuf::new(); - path.push(prefix); - path.push(base_name); - path.set_extension("jpg"); - image.save(&path)?; - - Ok(NewPhoto { - path: path.to_str().ok_or(DichroismError::ImageWrite)?.to_string(), - }) - } -} - -#[cfg(test)] -mod tests { - use super::*; - - const TEST_DATA_URI: &str = include_str!("../unit_test_data/img_data_uri.txt"); - const TEST_DATA_BASE64: &str = include_str!("../unit_test_data/test_data_base64.txt"); - - #[test] - fn test_gen_product_images() { - NewPhotoSetData::from_data_uri(TEST_DATA_URI.trim()) - .unwrap() - .commit(".") - .unwrap(); - } -} diff --git a/dichroism/src/models/new_photo_set.rs b/dichroism/src/models/new_photo_set.rs deleted file mode 100644 index e907592..0000000 --- a/dichroism/src/models/new_photo_set.rs +++ /dev/null @@ -1,8 +0,0 @@ -use super::NewPhoto; - -pub struct NewPhotoSet { - pub original: NewPhoto, - pub fullsize: NewPhoto, - pub base: NewPhoto, - pub thumbnail: NewPhoto, -} diff --git a/dichroism/src/models/photo.rs b/dichroism/src/models/photo.rs index dee6288..6069085 100644 --- a/dichroism/src/models/photo.rs +++ b/dichroism/src/models/photo.rs @@ -11,6 +11,10 @@ pub struct Photo { } impl Photo { + pub fn from_path(path: String) -> Self { + Self { path } + } + pub fn from_image(image: &DynamicImage) -> Result<Self> { let base_name = Uuid::new_v3(&Uuid::NAMESPACE_OID, &image.to_bytes()) .to_hyphenated() diff --git a/dichroism/src/models/photo_set.rs b/dichroism/src/models/photo_set.rs index 84fe0e1..7187c65 100644 --- a/dichroism/src/models/photo_set.rs +++ b/dichroism/src/models/photo_set.rs @@ -21,6 +21,15 @@ pub struct PhotoSet { } impl PhotoSet { + pub fn from_photos(original: Photo, fullsize: Photo, base: Photo, thumbnail: Photo) -> Self { + Self { + original, + fullsize, + base, + thumbnail, + } + } + pub fn from_data_uri(uri: &str) -> Result<Self> { let data = DATA_URI_RE .captures(uri) @@ -50,19 +59,3 @@ impl PhotoSet { }) } } - -#[cfg(test)] -mod tests { - //use super::*; - - const TEST_DATA_URI: &str = include_str!("../unit_test_data/img_data_uri.txt"); - const TEST_DATA_BASE64: &str = include_str!("../unit_test_data/test_data_base64.txt"); - - #[test] - fn test_gen_product_images() { - // PhotoSet::from_data_uri(TEST_DATA_URI.trim()) - // .unwrap() - // .commit(".") - // .unwrap(); - } -} |