wip: theme update & some cleanup
This commit is contained in:
parent
54d47a1b38
commit
620c1adb74
17 changed files with 181 additions and 905 deletions
|
|
@ -6,22 +6,16 @@
|
|||
//! Provides utilities for creating custom cosmic themes.
|
||||
//!
|
||||
|
||||
#[cfg(feature = "contrast-derivation")]
|
||||
pub use color_picker::*;
|
||||
pub use config::*;
|
||||
#[cfg(feature = "hex-color")]
|
||||
pub use hex_color::*;
|
||||
pub use model::*;
|
||||
pub use output::*;
|
||||
pub use theme_provider::*;
|
||||
#[cfg(feature = "contrast-derivation")]
|
||||
mod color_picker;
|
||||
mod config;
|
||||
#[cfg(feature = "hex-color")]
|
||||
mod hex_color;
|
||||
|
||||
mod model;
|
||||
mod output;
|
||||
mod theme_provider;
|
||||
|
||||
/// composite colors in srgb
|
||||
pub mod composite;
|
||||
/// get color steps
|
||||
pub mod steps;
|
||||
/// utilities
|
||||
pub mod util;
|
||||
|
||||
|
|
@ -33,47 +27,3 @@ pub const THEME_DIR: &str = "themes";
|
|||
pub const PALETTE_DIR: &str = "palettes";
|
||||
|
||||
pub use palette;
|
||||
|
||||
/// theme derivation from an image
|
||||
#[cfg(feature = "theme-from-image")]
|
||||
pub mod theme_from_image {
|
||||
use image::EncodableLayout;
|
||||
use kmeans_colors::{get_kmeans_hamerly, Kmeans, Sort};
|
||||
use palette::{rgb::Srgba, Pixel};
|
||||
use palette::{IntoColor, Lab};
|
||||
use std::path::Path;
|
||||
|
||||
/// Create a palette from an image
|
||||
/// The palette is sorted by how often a color occurs in the image, most often first
|
||||
pub fn theme_from_image<P: AsRef<Path>>(path: P) -> Option<Vec<Srgba>> {
|
||||
// calculate kmeans colors from file
|
||||
// let pixbuf = Pixbuf::from_file(path);
|
||||
let img = image::open(path);
|
||||
match img {
|
||||
Ok(img) => {
|
||||
let lab: Vec<Lab> = Srgba::from_raw_slice(img.to_rgba8().into_raw().as_bytes())
|
||||
.iter()
|
||||
.map(|x| x.color.into_format().into_color())
|
||||
.collect();
|
||||
|
||||
let mut result = Kmeans::new();
|
||||
|
||||
// TODO random seed
|
||||
for i in 0..2 {
|
||||
let run_result = get_kmeans_hamerly(5, 20, 5.0, false, &lab, i as u64);
|
||||
if run_result.score < result.score {
|
||||
result = run_result;
|
||||
}
|
||||
}
|
||||
let mut res = Lab::sort_indexed_colors(&result.centroids, &result.indices);
|
||||
res.sort_unstable_by(|a, b| (b.percentage).partial_cmp(&a.percentage).unwrap());
|
||||
let colors: Vec<Srgba> = res.iter().map(|x| x.centroid.into_color()).collect();
|
||||
Some(colors)
|
||||
}
|
||||
Err(err) => {
|
||||
eprintln!("{}", err);
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue