1 unstable release
0.1.0 | Mar 6, 2022 |
---|
#900 in Images
122 downloads per month
705KB
627 lines
palette-extract-rs
A Rust lib for extracting a color palette from an image!
Based on a port of Leptonica's modified median cut quantization algorithm.
Example
[^1]
[^1]: Image credit: João Pacheco
Credits
This Rust implementation of modified median cut quantization (MMCQ) is adapted from Kazuki Ohara's ColorThiefSwift.
Special thanks
- Sven Woltmann - for the Java Implementation. ColorThiefSwift is a port of this.
- Lokesh Dhakar - for the JavaScript version of Color Thief which inspired many of the ports.
- And of course, Dan Bloomberg for the original paper on MMCQ, along with the reference implementation found in Leptonica.
Installation
To use, add the following to Cargo.toml
under [dependencies]
:
palette_extract = "0.1.0"
Usage
Using the library consists of calling get_palette_rgb
or get_palette_with_options
with a set of RGB or RGBA pixels represented as a u8
slice.
Basic
A minimal example using 4 red pixels represented in RGB looks like this:
use palette_extract::{get_palette_rgb, Color};
fn main() {
let pixels: [u8; 12] = [255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0];
let r = get_palette_rgb(&pixels);
assert_eq!(r.len(), 1);
assert_eq!(r[0], Color::new(252, 4, 4));
}
Image from file/somewhere else
Here's one way to extract the color palette of an image by leveraging the image
crate to read and decode an image file (see full working example in examples
directory):
let image_path = "./path/to/image.jpg";
// open and decode the image using the `image` crate
let img = image::open(image_path).unwrap();
// grab a reference to the underlying pixels/RGB buffer
let pixels = img.as_bytes();
// extract the color palette
let palette = get_palette_rgb(&pixels);
// output the extracted color palette
palette.iter().for_each(|x| println!("{:?}", x));
More usage examples can be found in the examples
directory!
Background/Further reading
-
The paper describing the MMCQ algorithm: http://leptonica.org/papers/mediancut.pdf
-
A great post on different ways to extract color palettes: Color quantization